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

PostgreSQL事务快照为何失效?附操作步骤求助

问题原因与修正方案

核心问题

你在第一个repeatable read隔离级别的事务中导出的快照,是事务启动时的初始快照,并不包含你之后插入的数据。

  • PostgreSQL的repeatable read隔离级别下,事务的快照是启动时固定的——虽然当前事务能看到自己后续执行的插入操作,但pg_export_snapshot()导出的是事务刚启动时的数据库状态快照(此时表中还没有你插入的那条数据)。
  • 因此第二个事务通过该快照查询时,看到的是第一个事务启动时的空表,行数自然为0。

修正操作步骤

方案:更换第一个事务的隔离级别

  1. 开启第一个事务,设置隔离级别为read committed
  2. 向表中插入一行数据
  3. 查询表中行数,结果为1
  4. 执行select pg_export_snapshot();

  1. 开启第二个事务,隔离级别为repeatable read
  2. 执行set transaction snapshot '导出的快照ID';
  3. 查询表中行数,结果为1

注意事项

  • 第一个事务在第二个事务完成查询前,不能提交或回滚,否则第二个事务使用该快照时会触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:13:14