我在 Windows 环境中使用 PostgreSQL 9.2。我在使用 MSDTC的 2PC( 2 阶段提交)环境中。
我有一个客户端应用程序,它在 SERIALIZABLE 隔离级别启动事务,在表中为特定外键值插入新的数据行(列上有一个索引),并投票完成事务(交易已准备好)。事务将由事务协调器提交。
紧接着,在事务之外,同一个客户端向所有行请求这个相同的特定外键值。
因为在前一个事务真正提交之前可能存在延迟,所以 SELECT 子句可能会返回数据的前一个快照。事实上,它确实有时会发生,这是有问题的。当然,应用程序可能会重新设计,但在那之前,我正在寻找锁定解决方案。咨询锁?
我已经在对特定行执行 UPDATE 时解决了这个问题,然后使用 SELECT...FOR SHARE,它运行良好。SELECT 等待事务提交并返回新旧行。
现在我正在尝试为 INSERT 解决它。SELECT...FOR SHARE 不会立即阻止并返回。
这里没有并发问题,因为只有一个客户端处理一组特定的行。我已经知道 MVCC。
任何帮助表示赞赏。