Vad*_*hin 1 postgresql deadlock transaction
我使用 PostgreSQL 9.2,我没有在任何地方使用显式锁定,LOCK
语句和SELECT ... FOR UPDATE
. 然而,最近我得到了ERROR: 40P01: deadlock detected
. 但是,检测到死锁的查询包含在事务块中。无论如何,它是怎么来的?
假设会话 1 执行以下操作:
begin transaction;
update a set col = val where pk = 1;
update a set col = val where pk = 2;
commit;
Run Code Online (Sandbox Code Playgroud)
并且在完全相同的时间会话 2 做相反的事情:
begin transaction;
update a set col = val where pk = 2;
update a set col = val where pk = 1;
commit;
Run Code Online (Sandbox Code Playgroud)
然后会话 1 将等待会话 2 提交或回滚 pk = 2 行上的更新,同时会话 2 将等待会话 1 提交或回滚 pk = 1 行上的更新。死锁.
归档时间: |
|
查看次数: |
4036 次 |
最近记录: |