未授权的独占锁阻塞访问共享锁

3

根据我们在PostgreSQL中进行的测试,似乎未授权访问表的排他锁会阻止共享锁的访问。以下描述了我们执行的测试。

会话1:

begin;
select * from users where id = 1;

注:测试中事务被故意保持打开状态。

第二节:

alter table users add column foo boolean;

注意: 该语句被Session 1中的语句阻塞。尚未授予访问独占锁。

第三个会话:

select * from users where id = 2;

在第三个会话中,最后一个语句被阻塞了。

既然它被第一会话阻塞了,因为访问排他锁还没有被授予(由于被第一会话阻塞),那么它是如何被阻塞的?我们是否遗漏了什么?

1个回答

2
文档 描述了以下内容:
一个服务器进程会阻塞另一个进程,如果它持有与被阻塞进程的锁请求冲突的锁(硬阻塞),或者正在等待一个将会与被阻塞进程的锁请求冲突且在等待队列中排在前面的锁(软阻塞)。
因此,未被授予的锁会排队等待,你无法跳过具有冲突锁请求的进程。这样,除非阻塞交易需要永远执行,否则没有进程会被永久阻塞。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接