GBase 8c
其他
文章

GBase 8c数据库INSERT包含ON CONFLICT DO UPDATE子句行级触发器效果

发表于2023-12-08 15:14:0714次浏览1个评论

如果一个INSERT包含ON CONFLICT DO UPDATE子句并且引用了EXCLUDED列,有可能行级 BEFORE INSERT触发器和行级 BEFORE UPDATE触发器的效果可能会以一种对于 被更新行最终状态透明的方式被应用。不过,对于要执行的两种集合的行级 BEFORE触发器都不需要有EXCLUDED列引用。当同时有行级 BEFORE INSERT和 BEFORE UPDATE触发器修改被插入/ 更新的行时(即使修改或多或少都具有同等效力,但如果它们也不是幂等的,这可能会有问题), 应该考虑可能出现的意料之外的结果。注意在指定了 ON CONFLICT DO UPDATE时,不管有没有行被 UPDATE影响(并且不管是否采用了其他 UPDATE路径),语句级 UPDATE都将被执行。一个带有 ON CONFLICT DO UPDATE子句的INSERT 将首先执行语句级BEFORE INSERT, 然后执行语句级BEFORE UPDATE触发器, 接着是语句级AFTER UPDATE触发器, 最后是语句级AFTER INSERT触发器。

评论

登录后才可以发表评论
用户头像
levvel发表于 8个月前
先水一个