FOR UPDATE NOWAIT不起作用

时间:2015-03-17 15:36:11

标签: sql postgresql

有两个问题:

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。

1 个答案:

答案 0 :(得分:2)

NOWAIT影响其所处的陈述。它不会影响想要等待而不是报告错误的其他陈述。

要让第二个查询立即引发错误,如果它无法锁定行,您需要重写它以使用select ... for update nowait,然后{{1 }}。仅更新声明没有nowait选项。

update...