Ste*_*e A 12 postgresql database-deadlocks rails-postgresql
假设两个并发事务在Postgresql DB上执行以下查询:
交易A:
SELECT * FROM mytable WHERE id IN (1, 2, 3, 4) FOR UPDATE
Run Code Online (Sandbox Code Playgroud)
交易B:
SELECT * FROM mytable WHERE id IN (6, 3, 2, 1) FOR UPDATE
Run Code Online (Sandbox Code Playgroud)
由于Postgresql以不一致的顺序获取行锁,是否可能发生死锁?例如,如果Postgresql按照此示例中给出的id的顺序获取行锁,则可能存在死锁.
或者Postgresql内部是否足够智能,以便始终SELECT FOR UPDATE
以同一个表上的同时离散语句不会相互死锁的方式获取行锁(例如,始终按主键顺序获取行锁)?
如果PostgreSQL的不自动防止此类死锁的发生,是否有修改,以防止这种情况的查询方式(例如,如果事实上PostgreSQL的收购顺序行锁被赋予的标识,并始终如一地分拣ID应该防止死锁)?
谢谢你的帮助!
来自http://www.postgresql.org/docs/9.1/static/explicit-locking.html:
PostgreSQL 自动检测死锁情况并通过中止所涉及的事务之一来解决它们
该页面使用了一个涉及UPDATE
s 的示例,这相当于SELECT ... FOR UPDATE
锁定。
归档时间: |
|
查看次数: |
2541 次 |
最近记录: |