postgres跳过锁定不起作用

时间:2018-07-10 10:28:09

标签: postgresql postgresql-9.5

按照我测试SKIP LOCKED的步骤进行操作:

  1. 打开一个Postgres UI客户端的SQL控制台
  2. 连接到Postgres DB
  3. 执行查询

    CREATE TABLE t_demo AS
    SELECT         *
    FROM            generate_series(1, 4) AS id;
    

在该表中创建检查行:

TABLE t_demo

使用以下查询选择行:

 SELECT * 
 FROM t_demo 
 WHERE id = 2 
 FOR UPDATE SKIP LOCKED;

它返回结果为2

现在再次执行上述查询:

SELECT * 
FROM t_demo 
WHERE id = 2 
FOR UPDATE SKIP LOCKED;

第二个查询不应返回任何结果,但返回的结果为2

1 个答案:

答案 0 :(得分:0)

https://www.postgresql.org/docs/current/static/sql-select.html#SQL-FOR-UPDATE-SHARE

  

为防止操作等待其他交易   提交,使用NOWAIT或SKIP LOCKED选项

(重点是我的)

如果您在一个窗口中运行两个查询-您可能会在一个事务中运行两个查询(那么您的下一个语句不是其他事务”,或者在每个语句之后自动提交(默认)((但是您在第二个语句开始之前提交了第一个语句事务) ,因此释放了锁,您没有任何作用