根据官方文档,选择查询只需要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
/COMMIT
ROLLBACK
命令会在幕后为你发出。