↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

外键内连接消除遇到触发器造成的间隙 RSS

Richard Guo 在 hackers 上指出基于外键的内连接消除存在正确性问题。这项优化假定外键约束始终成立从而重写连接,但父行删除与级联删除并非原子:在语句执行到 AFTER ROW 触发器触发之间,快照可能看到约束被违反,结果就错了。他列出六种处理方向,从放弃优化、加锁谓词到接受一个有文档记录的边缘情况。当前实现的加锁方案过于保守,会在整个事务里禁用优化;补丁将拆成优化机制与间隙处理两部分分别评审。

发布于 2026-09-10T10:59:41.492428Z · Richard Guo · pgsql-hackers
外键 正确性 规划器

Richard Guo 在 hackers 上指出基于外键的内连接消除存在正确性问题。这项优化假定外键约束始终成立从而重写连接,但父行删除与级联删除并非原子:在语句执行到 AFTER ROW 触发器触发之间,快照可能看到约束被违反,结果就错了。他列出六种处理方向,从放弃优化、加锁谓词到接受一个有文档记录的边缘情况。当前实现的加锁方案过于保守,会在整个事务里禁用优化;补丁将拆成优化机制与间隙处理两部分分别评审。

Richard Guo 在 hackers 上指出基于外键的内连接消除存在正确性问题。这项优化假定外键约束始终成立从而重写连接,但父行删除与级联删除并非原子:在语句执行到 AFTER ROW 触发器触发之间,快照可能看到约束被违反,结果就错了。他列出六种处理方向,从放弃优化、加锁谓词到接受一个有文档记录的边缘情况。当前实现的加锁方案过于保守,会在整个事务里禁用优化;补丁将拆成优化机制与间隙处理两部分分别评审。

原始来源 ↗

来源记录
  • center.info_item · 80c18b23019b287b · 2026-10-03T04:08:35.169032Z
  • pgweb.info_item · 80c18b23019b287b · 2026-10-03T04:08:55.967155Z