我使用 PostgreSQL 9.2,并且我不在任何地方使用显式锁定,无论是LOCK
语句还是SELECT ... FOR UPDATE
. 但是,最近我得到了ERROR: 40P01: deadlock detected
. 但是,检测到死锁的查询被包装在事务块中。无论如何,它是怎么来的?
我使用 PostgreSQL 9.2,并且我不在任何地方使用显式锁定,无论是LOCK
语句还是SELECT ... FOR UPDATE
. 但是,最近我得到了ERROR: 40P01: deadlock detected
. 但是,检测到死锁的查询被包装在事务块中。无论如何,它是怎么来的?
假设会话 1 执行:
并且在同一时间会话 2 做相反的事情:
然后会话 1 将等待会话 2 提交或回滚 pk = 2 的行上的更新,同时会话 2 将等待会话 1 提交或回滚 pk = 1 的行上的更新。 .