PostgreSQL9.5 新增行级锁 SKIP LOCKED 属性,文档中描述如下:
Add new SELECT option SKIP LOCKED to skip locked rows (Thomas Munro)
This does not throw an error for locked rows like NOWAIT does.
我们知道可以通过 select .. from table where .. for update 语句锁住要更新的记录,在此事务提交前,之后的事务根据不知道这些行被锁住了。9.5 版本新增 SKIP LOCKED 属性,可以跳过这些被锁定的行,使 SQL 不报错,演示下。
环境准备
创建测试表,如下:
1 |
[pg95@db2 ~]$ psql fdb fdb |
事务A: 更新 id=100 的记录
1 |
fdb=> begin; |
备注:事务 A 未提交。
事务B: 使用 Nowait 属性
1 |
fdb=> begin; |
备注:事务 B 无法获取到 id=100 的行锁。
事务C: 使用 Skip Locked 属性
1 |
fdb=> select * from test_5 order by id desc limit 1 for update skip locked; |
备注:使用 skip locked 属性则跳过了被锁的记录。
参考
原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/239634.html