【问题标题】:Insert from Select Postgresql with primary key constraint从具有主键约束的 Select Postgresql 中插入
【发布时间】:2014-04-16 22:31:47
【问题描述】:

我正在尝试将数据从一个表复制到另一个在 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”占位符?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

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

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

    【讨论】:

    • 我刚试过这个,它要么不起作用,要么我有一些设置不正确。它试图使用“Temp”。“Column2”作为我想要默认的 ID 字段并抛出此错误:错误:整数的无效输入语法:“Test”在语句中:INSERT INTO“A”SELECT 'Test';跨度>
    • 我认为我们需要指定我们正在填写的字段。我会编辑
    • 嗨,你能帮我解决这个问题吗?我正在尝试解决类似的问题stackoverflow.com/questions/59713505/…
    猜你喜欢
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多