postgres在一个upsert语句中的多个冲突

时间:2016-06-29 21:33:27

标签: postgresql

我在同一个表上有两个独特的约束,我想在该表上做一个upsert语句。

是否可以在upsert中指定两个冲突?我看到了这个:How to upsert in Postgres on conflict on one of 2 columns?

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

unique_constraint_1 =(col_1) unqiue_constraint_2 =(col_1,col_2)

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; 

谢谢!

1 个答案:

答案 0 :(得分:1)

根据documentationON CONFLICT默认覆盖所有唯一约束。

如果省略,则会处理与所有可用约束(和唯一索引)的冲突

在您的情况下,正如Grzegorz Grabek所指出的那样,不需要两个约束。这是因为更严格的单列约束已经涵盖了较松散的两列约束。