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;
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;