有两个问题:
1
BEGIN;
SELECT * FROM "Users"
WHERE "Users"."Name" = 'user0'
FOR UPDATE NOWAIT ;
select pg_sleep(30);
END;
2
BEGIN;
UPDATE "Users"
SET "Respect" = 2
WHERE "Users"."Name" = 'user0';
END;
当我使用NOWAIT时,我希望第二个查询会返回错误,但它对我不起作用。第二个查询挂起并等待第一个查询。我错过了什么?我尝试了9.2-9.4 Postgres。
答案 0 :(得分:2)
NOWAIT影响其所处的陈述。它不会影响想要等待而不是报告错误的其他陈述。
要让第二个查询立即引发错误,如果它无法锁定行,您需要重写它以使用select ... for update nowait
,然后{{1 }}。仅更新声明没有nowait选项。
update...