You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中REPEATABLE READ事务SELECT FOR UPDATE的快照生成时机

PostgreSQL REPEATABLE READ隔离级别下事务快照生成时机

针对你提到的场景:两个几乎同时启动的REPEATABLE READ事务,均需执行SELECT ... FOR UPDATE和UPDATE操作,第二个事务的快照生成时机明确如下:

  • 排除两个错误时机:
    • 不是事务启动时:PostgreSQL的REPEATABLE READ不会在事务刚启动就生成快照,快照的建立和事务的第一个实际数据访问操作绑定。
    • 不是SELECT语句到达数据库并尝试加锁时:如果第二个事务的SELECT ... FOR UPDATE因为第一个事务持有锁而进入等待,这个阶段不会触发快照生成。
  • 正确时机:数据库释放锁并完成SELECT语句执行时。当第一个事务释放目标行的锁后,第二个事务的SELECT ... FOR UPDATE才会真正开始执行,此时PostgreSQL会为该事务生成专属快照。后续事务内的所有操作(包括后续的UPDATE)都会基于这个快照读取数据,确保整个事务期间看到的数据状态一致,符合REPEATABLE READ的隔离要求。

补充一点:这个快照一旦生成就不会改变,哪怕后续有其他并发事务提交了对同一数据的修改,当前事务也只会看到快照建立时的数据状态。


内容的提问来源于stack exchange,提问作者Tigran Rostomyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:42:11