我有些困惑于阅读关于PostgreSQL死锁的内容。
一个典型的死锁例子是:
-- Transaction 1
UPDATE customer SET ... WHERE id = 1
UPDATE customer SET ... WHERE id = 2
-- Transaction 2
UPDATE customer SET ... WHERE id = 2
UPDATE customer SET ... WHERE id = 1
但是,如果我将代码更改如下会怎样:
-- Transaction 1
UPDATE customer SET ... WHERE id IN (1, 2)
-- Transaction 2
UPDATE customer SET ... WHERE id IN (1, 2)
这里会存在死锁的可能吗?
我的问题本质上是:在第二种情况下,PostgreSQL是逐个锁定行,还是锁定由WHERE
条件涵盖的整个作用域?
提前感谢!