PostgreSQL中的表锁和行锁如何相互作用?

3

我理解表级锁是如何与其他表级锁相互作用、行级锁如何与其他行级锁相互作用,但我不完全理解表级锁与行级锁之间的交互作用。

例如,进程A更新表T中的某一行,因此获取一个“ROW EXCLUSIVE”锁。同时,假设进程B在另一行上获取了一个“FOR NO KEY UPDATE”行锁。那么进程A会阻塞进程B吗?

总体来说,表级锁和行级锁如何相互作用?

1个回答

3
锁完全不与行锁交互。 在操作开始之前,会获取表级锁以防止冲突活动(例如删除正在使用的表)。
随着行的处理,会获取行级锁。它们可以防止对同一行进行并发更新,而允许并发事务同时更新同一张表中的不同行。

1
所以如果我理解正确,在上面的示例中,进程A拥有一个“行排他”锁,不会阻止进程B在同一张表上获取“FOR NO KEY UPDATE”行锁?它只会阻塞特定的其他表锁吗? - undefined
1
没错,完全正确。 - undefined

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