BEGIN
INSERT INTO q VALUES(1);
SELECT * FROM q;
END;
根据http://www.postgresql.org/docs/9.1/static/explicit-locking.html,我假设INSERT
查询获取了ROW EXCLUSIVE
类型的锁。这是否意味着在运行SELECT
查询时此锁也处于活动状态?我假设这个基于:"一旦获得,通常会持有锁直到交易结束。" (引自上述文件)
一般来说,上述语义与:
相同BEGIN
LOCK q IN ROW EXCLUSIVE MODE;
INSERT INTO q VALUES(1);
SELECT * FROM q;
END;
答案 0 :(得分:0)
使用Frank_Heikens的想法我测试了上述假设,并且可以确认INSERT
查询的隐式获取锁定在事务结束前保持活动状态。