在PostgreSQL中select查询何时获取ExclusiveLock和RowExclusiveLock ?<



根据官方文档,选择查询只需要sharelock,但我发现我的选择查询获得排他锁。这是怎么发生的?下面是我的select查询:

select gc.id 
from group_access_strategy ga
left outer join person_group pg on gp.person_group_id=pg.id 
where gp.id=3

与官方文档不同的是,我添加了左连接。

很可能您在同一事务中运行了另一个命令,如ALTER TABLE person_group ...(访问独占)或UPDATE/INSERT/DELETE(行独占)。锁将一直存在,直到事务完成或终止。

所以如果你输入:

BEGIN; --BEGIN starts the transaction
UPDATE group_access_strategy SET column = 'some data' where id = 1;
SELECT
gc.id,
FROM
group_access_strategy ga
LEFT OUTER JOIN person_group pg ON (gp.person_group_id = pg.id)
WHERE
pg.id = 3

UPDATE语句将创建一个行排他锁,直到您通过以下方式结束事务时才会释放:

保存自BEGIN以来的所有更改:

COMMIT;

取消自BEGIN以来的所有语句的效果
ROLLBACK;

如果你是Postgres的新手,通常在像PG Admin或DataGrip这样的IDE中运行你的查询,当你点击相应的UI按钮时,BEGIN/COMMITROLLBACK命令会在幕后为你发出。

相关内容

最新更新