当表格中的2列中的一列发生冲突时,是否可以在Postgres 9.5中执行upsert
。基本上我有2列,如果任何列抛出唯一约束违规,那么我想执行更新操作。
是的,这种行为是默认的。任何唯一约束违规构成冲突,然后如果指定UPDATE
则执行ON CONFLICT DO UPDATE
。 INSERT
语句只能有一个ON CONFLICT
子句,但该子句的conflict_target
可以指定多个列名,每个列名必须有一个索引,例如UNIQUE
约束。但是,您只能使用一个conflict_action
,并且在处理该操作时,您将无法获得有关哪个约束导致冲突的信息。如果您需要这种信息或特定操作,具体取决于约束违规,您应该编写一个触发器函数,但之后您将丢失INSERT ... ON CONFLICT DO ...
语句的重要原子性。
我认为在Postgres 9.5 ON CONFLICT只能有一个约束或多个列名,但是多列必须合并一个索引