注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL9.5:新增行级锁 SKIP LOCKED 属性  

2015-08-05 16:53:21|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

       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 不报错,演示下。
  
--创建测试表

[pg95@db2 ~]$ psql fdb fdb
psql (9.5alpha1)
Type "help" for help.

fdb=> create table test_5(id serial, name character varying(64));
CREATE TABLE

fdb=> insert into test_5(id,name) select n , n|| 'a' from generate_series(1,100) n;
INSERT 0 100


--事务A: 更新 id=100 的记录

fdb=> begin;
BEGIN
    
fdb=> select * from test_5 order by id desc limit 1 for update;
 id  | name
-----+------
 100 | 100a
(1 row)

备注:事务 A 未提交。

--事务B: 使用 nowait 属性

fdb=> begin;
BEGIN
    
fdb=> select * from test_5 order by id desc limit 1 for update nowait;
ERROR:  could not obtain lock on row in relation "test_5"

fdb=> \q

备注:事务 B 无法获取到 id=100 的行锁。

--事务C: 使用 skip locked 属性

fdb=> select * from test_5 order by id desc limit 1 for update skip locked;
 id | name
----+------
 99 | 99a
(1 row)

备注:使用 skip locked 属性则跳过了被锁的记录。


--参考
  评论这张
 
阅读(1562)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017