【发布时间】:2019-08-29 05:08:11
【问题描述】:
我了解表锁如何与其他表锁交互以及行锁如何与其他行锁交互,但我不完全了解表锁如何与行锁交互。
例如,进程 A 更新了表 T 中的某些行,因此获得了ROW EXCLUSIVE 锁。同时,假设进程 B 在 another 行上获得了 FOR NO KEY UPDATE 行锁。进程A会阻塞进程B吗?
一般来说,表锁如何与行锁交互?
【问题讨论】:
标签: database postgresql locks
我了解表锁如何与其他表锁交互以及行锁如何与其他行锁交互,但我不完全了解表锁如何与行锁交互。
例如,进程 A 更新了表 T 中的某些行,因此获得了ROW EXCLUSIVE 锁。同时,假设进程 B 在 another 行上获得了 FOR NO KEY UPDATE 行锁。进程A会阻塞进程B吗?
一般来说,表锁如何与行锁交互?
【问题讨论】:
标签: database postgresql locks
表锁根本不与行锁交互。
表锁在之前操作开始以防止表范围级别上的冲突活动(例如,删除其他人正在使用的表)。
在处理行时采用行锁。例如,它们可以防止对同一行进行并发更新,而并发事务可以同时更新同一张表中的不同行。
【讨论】:
ROW EXCLUSIVE 锁的进程A 不会阻止进程B 在同一张表上获取FOR NO KEY UPDATE 行锁?它只会阻塞某些其他表锁?