table锁和行锁在PostgreSQL中如何交互?
How do table locks and row locks interact with each other in PostgreSQL?
我了解 table 锁如何与其他 table 锁交互以及行锁如何与其他行锁交互,但我不完全理解 table 锁如何与行交互锁。
例如,进程 A 更新了 table T 中的某行,因此获得了 ROW EXCLUSIVE
锁。同时,假设进程 B 在 另一个 行上获取 FOR NO KEY UPDATE
行锁。进程A会阻塞进程B吗?
一般来说,如何table锁与行锁交互?
Table 锁根本不与行锁交互。
Table 在操作开始 之前 锁定,以防止 activity 在 table 范围内发生冲突(例如,删除别人正在使用的 table。
在处理行时采用行锁。例如,它们可以防止同一行上的并发更新,而并发事务可以同时更新同一 table 中的不同行。
我了解 table 锁如何与其他 table 锁交互以及行锁如何与其他行锁交互,但我不完全理解 table 锁如何与行交互锁。
例如,进程 A 更新了 table T 中的某行,因此获得了 ROW EXCLUSIVE
锁。同时,假设进程 B 在 另一个 行上获取 FOR NO KEY UPDATE
行锁。进程A会阻塞进程B吗?
一般来说,如何table锁与行锁交互?
Table 锁根本不与行锁交互。
Table 在操作开始 之前 锁定,以防止 activity 在 table 范围内发生冲突(例如,删除别人正在使用的 table。
在处理行时采用行锁。例如,它们可以防止同一行上的并发更新,而并发事务可以同时更新同一 table 中的不同行。