Postgres 在 select 期间将所有列的数据类型更改或检查为语句

Postgres change or check datatype of all column during select into statement

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" 请任何人帮助我。

正如 a_horse_with_no_name 所说 - 强制转换 select 列表表达式。 作为许多 alter table 语句的替代方法,您可以这样做:(1) 使用 select 查询创建具有临时名称的 table,然后 (2) 删除原始 table最后 (3) 用临时名称重命名那个。您仍然需要注意原始 table.

中可能存在的约束和索引
-- 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;