我正在尝试将数据从一个表复制到另一个表中,并在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”占位符?
答案 0 :(得分:2)
如果生成了ID(即默认设置为序列的下一个val),只需将其保留并复制其余部分。
INSERT INTO "A"
("Column2","Column3","Column4"...)
SELECT "Temp"."Column2", "Temp"."Column3"... FROM "Temp";