根据我们在PostgreSQL中进行的测试,似乎未授权访问表的排他锁会阻止共享锁的访问。以下描述了我们执行的测试。
会话1:
begin;
select * from users where id = 1;
注:测试中事务被故意保持打开状态。
第二节:
alter table users add column foo boolean;
注意: 该语句被Session 1中的语句阻塞。尚未授予访问独占锁。
第三个会话:
select * from users where id = 2;
在第三个会话中,最后一个语句被阻塞了。
既然它被第一会话阻塞了,因为访问排他锁还没有被授予(由于被第一会话阻塞),那么它是如何被阻塞的?我们是否遗漏了什么?