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

cod*_*efx 9 postgresql upsert postgresql-9.5

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

Pat*_*ick 9

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

  • 我不确定这是100%正确,不可否认,这个问题很模糊.如果2列具有不同的唯一约束(我从问题中理解),那么ON CONFLICT只能用于DO NOTHING.你似乎无法链接或"脱离"所谓的conflict_target. (4认同)