【问题标题】:How do table locks and row locks interact with each other in PostgreSQL?PostgreSQL 中表锁和行锁如何交互?
【发布时间】:2019-08-29 05:08:11
【问题描述】:

我了解表锁如何与其他表锁交互以及行锁如何与其他行锁交互,但我不完全了解表锁如何与行锁交互。

例如,进程 A 更新了表 T 中的某些行,因此获得了ROW EXCLUSIVE 锁。同时,假设进程 B 在 another 行上获得了 FOR NO KEY UPDATE 行锁。进程A会阻塞进程B吗?

一般来说,表锁如何与行锁交互?

【问题讨论】:

    标签: database postgresql locks


    【解决方案1】:

    表锁根本不与行锁交互。

    表锁在之前操作开始以防止表范围级别上的冲突活动(例如,删除其他人正在使用的表)。

    在处理行时采用行锁。例如,它们可以防止对同一行进行并发更新,而并发事务可以同时更新同一张表中的不同行。

    【讨论】:

    • 如果我理解正确,在上面的例子中,拥有ROW EXCLUSIVE 锁的进程A 不会阻止进程B 在同一张表上获取FOR NO KEY UPDATE 行锁?它只会阻塞某些其他表锁?
    • 没错,没错。
    猜你喜欢
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2018-05-23
    • 2015-10-26
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多