我想要 Postgresql 中的事务有某种行为,但我不知道这是否可能。我将这种行为描述为“乐观读锁”,但这似乎不是正确的术语。
这是我想要的行为:
- 我的交易开始了。其事务隔离级别是“可重复读”或“可串行化”。
- 在事务中我读取了 A 行。
- 在事务中我做了更多的读取和写入,但我从不更新 A 行。
- 我尝试提交交易。
现在,如果 A 行在我的事务生命周期内被其他事务更改,我需要事务失败。如果 A 行没有改变,我希望事务能够提交。
有没有办法在 Postgresql 中做到这一点?
我的替代方法是使用事务中的一些随机值更新 A 行,以强制写入冲突。然而,这将意味着很多不必要的冲突,因为如果不强制冲突,A 行将很少被更新,但经常被读取。