【发布时间】:2018-07-10 10:28:09
【问题描述】:
按照我测试SKIP LOCKED的步骤:
- 打开一些 Postgres UI 客户端的 sql 控制台
- 连接到 Postgres 数据库
-
执行查询
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
【问题讨论】:
-
您在锁定该行时尚未打开任何事务,因此锁定立即消失
-
您可能启用了自动提交,因此每个语句都会自动提交,从而释放锁。具体如何更改取决于“一些 Postgres UI 客户端”。