从Select Postgresql插入主键约束

时间:2014-04-16 22:31:47

标签: sql postgresql

我正在尝试将数据从一个表复制到另一个表中,并在Postgresql中使用相同的模式。表上有一个主键约束,因此由于重复的键问题而运行它会失败:

INSERT INTO "A" SELECT * From "Temp";
SQLSTATE[23505]: Unique violation: 7 ERROR:  duplicate key value violates unique constraint "A_Id_pkey"

在MySQL中,我可以通过调用每个模式列并用NULL替换主键来解决这个问题。

INSERT INTO "A" SELECT NULL, "Temp"."Column2", "Temp"."Column3"... FROM "Temp";

然而,这在Postgresql中失败了,尽管我的主键的DEFAULT设置为nextval('a_id_seq':: regclass):

SQLSTATE[23502]: Not null violation: 7 ERROR:  null value in column "Id" violates not-null constraint

Postgresql中是否有任何语法允许我为即将发布的INSERT语句选择“DEFAULT”占位符?

1 个答案:

答案 0 :(得分:2)

如果生成了ID(即默认设置为序列的下一个val),只需将其保留并复制其余部分。

INSERT INTO "A" 
("Column2","Column3","Column4"...)
SELECT "Temp"."Column2", "Temp"."Column3"... FROM "Temp";