我在Postgres中有一个查询
insert into c_d (select * from cd where ak = '22019763');
我收到以下错误消息:
ERROR: column "region" is of type integer but expression is of type character varying
HINT: You will need to rewrite or cast the expression.
我在Postgres中有一个查询
insert into c_d (select * from cd where ak = '22019763');
我收到以下错误消息:
ERROR: column "region" is of type integer but expression is of type character varying
HINT: You will need to rewrite or cast the expression.
INSERT INTO table1 SELECT * FROM table2
完全取决于列的顺序,这是表定义的一部分。它将把table1的每一列与table2的具有相同order值的列对齐,而不考虑名称。INSERT INTO SELECT *
语句在风格上是不好的形式,除非两个表被定义,并且永远被定义为完全相同的方式。只需要增加一个额外的列到cd中,您就会开始收到有关多余额外列的错误信息。SELECT
语句中显式调用列。您可以调用函数来更改每个列引用中的类型(或者可以定义一个新的类型转换来隐式执行此操作--请参见CREATE CAST
),并且您可以使用AS
将列标签设置为与目标列匹配。INSERT INTO tablename (col1, col2, col3) SELECT * FROM ...
- hamx0rEXCEPT
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_catalog = 'my_db' AND table_name = 'table2';```
这将会给出table1中不在table2中的列名。别忘了反过来运行。
添加这些列到每个表中,以使得所有列都相同。我有一个拥有900多个列的表格,这个方法对我太有帮助了。
- Noah Gary请查看PostgreSQL的插入文档。语法如下:
INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) | query }
这里看起来会是这样的:
INSERT INTO c_d (column1, column2...) select * from cd where ak = '22019763'