【问题标题】:Postgres change or check datatype of all column during select into statement [closed]Postgres在select into语句期间更改或检查所有列的数据类型[关闭]
【发布时间】:2021-09-27 08:53:03
【问题描述】:
INSERT INTO table_name( a, b, c, d) 
SELECT t1.a a, t1.b b, t1.c c, t1.d d 
FROM table_name t1
AS t(a bigint, b character varying, c numeric, d numeric)

但我收到了 PG::SyntaxError: ERROR: syntax error at or near "AS" 请任何人帮助我。

【问题讨论】:

  • 嘿@klin,感谢您的快速回复,但我在导入数据时需要像这样检查 30 列,我可以以更简单的方式添加所有 30 列吗?
  • 您需要分别对每一列进行强制转换和别名:select t1.a::bigint as a, ...
  • 如果你想改变列的类型,你必须使用ALTER TABLE。没有其他办法。

标签: sql postgresql sql-insert


【解决方案1】:

正如 a_horse_with_no_name 所说 - 转换选择列表表达式。 作为众多alter table 语句的替代方案,您可以这样做:(1) 使用选择查询创建具有临时名称的表,然后 (2) 删除原始表,最后 (3) 使用临时名称重命名该表。您仍然必须注意原始表中可能存在的约束和索引。

-- 1.
create table tmp_table_name as
  SELECT a::bigint as a, b::text as b, c::numeric as c, d::numeric as d
  FROM table_name;
-- 2.
drop table table_name;
-- 3.
alter table tmp_table_name rename to table_name;

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多