如何在Postgres中插入2列中的一列冲突?

时间:2016-01-27 08:15:22

标签: postgresql upsert postgresql-9.5

当表格中的2列中的一列发生冲突时,是否可以在Postgres 9.5中执行upsert。基本上我有2列,如果任何列抛出唯一约束违规,那么我想执行更新操作。

2 个答案:

答案 0 :(得分:7)

是的,此行为是默认行为。任何唯一约束违规都会构成冲突,如果指定了UPDATE,则会执行ON CONFLICT DO UPDATEINSERT语句只能有一个ON CONFLICT子句,但该子句的conflict_target可以指定多个列名,每个列名必须有一个索引,例如UNIQUE约束。但是,您只能使用一个conflict_action,并且在处理该操作时,您将无法获得有关哪个约束导致冲突的信息。如果您需要这种信息或特定操作,具体取决于约束违规,您应该编写一个触发器函数,但是您将失去INSERT ... ON CONFLICT DO ...语句的最重要的原子性。

答案 1 :(得分:0)

我认为在Postgres 9.5中,ON CONFLICT只能具有一个约束或多个列名,但是在此之上,多个列必须具有一个索引组合