gpt4 book ai didi

sql - Postgres,更新和锁定顺序

转载 作者:行者123 更新时间:2023-11-29 11:30:23 25 4
gpt4 key购买 nike

我正在研究 Postgres 9.2。

有 2 个 UPDATE,每个在它们自己的事务中。一个看起来像:

UPDATE foo SET a=1 WHERE b IN (1,2,3,4);

另一个类似:

UPDATE foo SET a=2 WHERE b IN (1,2,3,4);

这些可能同时运行,实际上在“IN”表达式中有 500 多个。我有时会看到死锁。 “IN”表达式中的项目顺序可能不会真正影响真正的锁顺序,这是真的吗?

最佳答案

UPDATE 命令中没有ORDER BY
但是有 SELECT。使用 row-level lockingFOR UPDATE clause在子查询中:

UPDATE foo f
SET a = 1
FROM (
SELECT b FROM foo
WHERE b IN (1,2,3,4)
<b>ORDER BY b
FOR UPDATE</b>
) upd
WHERE f.b = upd.b;

当然,b 必须是 UNIQUE 或者您需要在 ORDER BY 子句中添加更多表达式以使其明确。

并且您需要对所有 UPDATEDELETESELECT .. FOR UPDATE 执行相同的顺序表上的声明。

相关的,有更多的细节:

关于sql - Postgres,更新和锁定顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com