Postgres查询错误

时间:2009-11-06 09:52:57

标签: postgresql mysql

我在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.

2 个答案:

答案 0 :(得分:8)

INSERT INTO table1 SELECT * FROM table2完全取决于列的 order ,这是表定义的一部分。无论名称如何,它都会将table1的每一列与table2的列相对应,具有相同的 order 值。

你遇到的问题是来自cd的具有相同订单值的列与“region”表的c_d具有不兼容的类型,并且隐式类型转换不可用于清除混淆。

INSERT INTO SELECT *语句在风格上是不好的形式,除非定义了两个表,并且将永远以相同的方式定义完全。只需将一个额外的列添加到cd中,您就会开始收到有关额外列的无关错误。

如果可能的话,我建议明确地在SELECT语句中调用列。您可以调用一个函数来更改每个列引用中的类型(或者您可以定义一个新的类型转换来隐式执行此操作 - 请参阅CREATE CAST),您可以使用AS来设置列标签以匹配目标列的标签。

如果由于某种原因无法执行此操作,请在您的问题中注明。

答案 1 :(得分:1)

查看PostgreSQL insert documentation.语法为:

INSERT INTO table [ ( column [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) | query }

这里看起来像:

INSERT INTO c_d (column1, column2...) select * from cd where ak = '22019763'

这是在将值从一个表插入另一个表时要使用的语法,其中列类型和顺序不完全相同。