如何使用PostgreSQL锁定数据库表中的相关行

时间:2019-05-30 19:17:16

标签: postgresql postgresql-11

我有一张桌子,我用id锁定了它以进行更新。

select name from tablename where id=2 for update

如何测试db表中的相关行已被锁定。

2 个答案:

答案 0 :(得分:1)

如果您确定带有id=2的行存在,则可以使用:

select name from tablename where id=2
for update skip locked

如果结果为空,则表示该行已被另一个用户锁定(或不存在)。

您还可以使用:

select name from tablename where id=2
for update nowait

如果该行存在并且被另一用户锁定,则查询将引发错误。

答案 1 :(得分:0)

是出于学习或培训目的,如果不是,您想要达到的目标是什么?

打开两个连接(例如,使用“ psql”),然后每次运行:

begin; select name from tablename where id=2 for update;

第二个应该阻塞,直到第一个执行回滚或提交。这种阻塞是锁定的证据。有很多变体,一个或另一个或两者可能都在执行实际的UPDATE,而不是SELECT ... FOR UPDATE。