我正在尝试将从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 列设置为默认值吗?
多谢
1条答案
按热度按时间yeotifhr1#
INSERT ... ON CONFLICT DO UPDATE
语句(实际上也是UPDATE
语句)不允许多次修改同一行。您的问题中的{jobs_sql}
是什么还不清楚,但它必须包含多行,并且其中至少有两行具有相同的job_id
。确保相同的
job_id
不会在要执行INSERT
的行中出现多次。