postgresql Postgres上插基数冲突

wlsrxk51  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(127)

我正在尝试将从SQL表中提取的数据插入到Postgres表中,其中的行可能存在,也可能不存在。如果它们确实存在,我希望将特定列设置为其默认值(0)
该表为

site_notes (
job_id text primary key,
attachment_id text,
complete int default 0);

我的问题是

INSERT INTO site_notes (
                job_id,
                attachment_id
            )
            VALUES 
                {jobs_sql}
            ON CONFLICT (job_id) DO UPDATE
            SET complete = DEFAULT;

但是,我收到一个错误:* psycopg2.错误.基数违规:ON CONFLICT DO UPDATE命令不能再次影响行提示:确保在同一命令中建议插入的行不具有重复的约束值。*
有人能建议如何在发生冲突时将 complete 列设置为默认值吗?
多谢

yeotifhr

yeotifhr1#

INSERT ... ON CONFLICT DO UPDATE语句(实际上也是UPDATE语句)不允许多次修改同一行。您的问题中的{jobs_sql}是什么还不清楚,但它必须包含多行,并且其中至少有两行具有相同的job_id
确保相同的job_id不会在要执行INSERT的行中出现多次。

相关问题