按照我测试SKIP LOCKED
的步骤进行操作:
执行查询
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
答案 0 :(得分:0)
https://www.postgresql.org/docs/current/static/sql-select.html#SQL-FOR-UPDATE-SHARE
为防止操作等待其他交易 提交,使用NOWAIT或SKIP LOCKED选项
(重点是我的)
如果您在一个窗口中运行两个查询-您可能会在一个事务中运行两个查询(那么您的下一个语句不是其他事务”,或者在每个语句之后自动提交(默认)((但是您在第二个语句开始之前提交了第一个语句事务) ,因此释放了锁,您没有任何作用