upsert
当表中的两列之一发生冲突时,是否可以在 Postgres 9.5 中执行?基本上我有 2 列,如果任一列抛出唯一约束违规,那么我想执行更新操作。
4111 次
2 回答
8
是的,这种行为是默认的。任何唯一的约束违反都构成冲突,然后UPDATE
如果ON CONFLICT DO UPDATE
指定则执行。该INSERT
语句只能有一个ON CONFLICT
子句,但该conflict_target
子句的 可以指定多个列名,每个列名都必须有一个索引,例如UNIQUE
约束。但是,您仅限于单个conflict_action
,并且在处理该操作时您将无法获得有关哪个约束导致冲突的信息。如果您需要那种信息,或者根据违反约束的特定操作,您应该编写一个触发器函数,但这样您就失去了INSERT ... ON CONFLICT DO ...
语句的最重要的原子性。
于 2016-01-27T08:28:38.227 回答
1
我认为在 Postgres 9.5 ON CONFLICT 中只能有一个约束或多个列名,但在该多个列上必须组合一个索引
于 2019-04-17T10:50:36.580 回答