PostgreSQL在一个upsert语句中发生多个冲突

PostgreSQL在一个upsert语句中发生多个冲突,postgresql,upsert,Postgresql,Upsert,在同一个表上有两个唯一的约束,我想在该表上执行upsert语句 是否可以在upsert中指定这两个冲突?我看到了: 但我的问题稍微复杂一些,因为其中一个唯一约束是另一个唯一约束的子集。即 唯一_约束_1=(列_1) unqiue_约束_2=(列_1,列_2) 谢谢 根据,ON CONFLICT默认覆盖所有唯一约束 省略时,将处理与所有可用约束(和唯一索引)的冲突 在您的案例中,不需要两个约束,正如Grzegorz Grabek已经指出的那样。这是因为更严格的单列约束已经涵盖了更宽松的两列约束。不

在同一个表上有两个唯一的约束,我想在该表上执行upsert语句

是否可以在upsert中指定这两个冲突?我看到了:

但我的问题稍微复杂一些,因为其中一个唯一约束是另一个唯一约束的子集。即

唯一_约束_1=(列_1) unqiue_约束_2=(列_1,列_2)

谢谢

根据,
ON CONFLICT
默认覆盖所有唯一约束

省略时,将处理与所有可用约束(和唯一索引)的冲突


在您的案例中,不需要两个约束,正如Grzegorz Grabek已经指出的那样。这是因为更严格的单列约束已经涵盖了更宽松的两列约束。

不,很遗憾,您不能。您可以指定一个冲突,但只能指定一个。此问题已提出1年了。我也有同样的问题。
UPSERT
失败,因为冲突在
UNIQUE
约束上,而单个
on conflict
未考虑该约束。有什么变化吗?任何解决方法?第二个约束不包括第一个约束吗?首先,如果col1是唯一的,那么col1,col2在同一个表中总是唯一的。你不需要两个独一无二的犯人。只需删除第二个缺点。它将解决您的问题,并加快向该表中的所有插入。
INSERT INTO table (col_1, col_2, col_3) 
VALUES (val_1, val_2, val_3) 
ON CONFLICT (what do I put here to account for both constraints?) 
DO NOTHING;