【发布时间】:2021-10-11 10:35:39
【问题描述】:
我这样做是为了解决关于 PostgreSQL 中的唯一约束在 2 列中包含空值的问题:
CREATE UNIQUE INDEX uc_column1_column2_column3_column4 ON schema.table
(column1, column2, COALESCE(column3, '0'), COALESCE(column4,'0'));
请看这里:Create unique constraint with null columns
但是现在我有另一个问题,因为使用索引而不是约束我有错误:
没有符合 ON CONFLICT 规范的唯一或排除约束
当我执行这个 SQL 请求时:
INSERT INTO table
(column1,column2, column3, column4, columnA, columnB, columnC)
VALUES (1,2,3,4,A,B,C)
ON CONFLICT (column1,column2, column3, column4)
DO UPDATE SET column1= EXCLUDED.column1
RETURNING *
注意:我确实得到了正确的约束错误,但没有“冲突”行。
【问题讨论】:
-
关于冲突(column1, column2, COALESCE(column3, '0'), COALESCE(column4,'0'))
-
请从您的核心表定义
CREATE TABLE ...和您的 Postgres 版本开始。关于DO UPDATE SET column1= EXCLUDED.column1.. 考虑stackoverflow.com/a/42217872/939860 -
谢谢 Cetin。它以这种方式按预期工作。谢谢欧文。我将更深入地了解以避免
DO UPDATE SET column1=EXCLUDED.column1。在我第一次尝试时,DO NOTHING什么也没返回...
标签: sql postgresql indexing constraints upsert