gpt4 book ai didi

postgresql - 没有显式锁定的postgres死锁

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

我使用的是 PostgreSQL 9.2,我没有在任何地方使用显式锁定,无论是 LOCK 语句还是 SELECT ... FOR UPDATE。但是,最近我得到了 ERROR: 40P01: deadlock detected。但是,检测到死锁的查询包含在事务 block 中。无论如何,它是怎么来的?

最佳答案

您不需要任何明确的 LOCK 即可进入死锁。这是一个非常简单的演示,仅包含 INSERT:

create table a(i int primary key);
create table b(i int primary key);

第 1 节课:

begin;
insert into a values(1);

然后 session #2 执行:

begin;
insert into b values(1);
insert into a values(1);
-- here it goes into waiting for session #1 to finish its transaction

然后 session #1 执行:

insert into b values(1);

然后死锁发生了:

ERROR: deadlock detected
DETAIL: Process 9571 waits for ShareLock on transaction 4150; blocked by process 9501.
Process 9501 waits for ShareLock on transaction 4149; blocked by process 9571.
HINT: See server log for query details.

简单的 UPDATE 或 UPDATE 和 INSERT 的组合也会发生同样的情况。这些操作采用隐式锁定,如果它们以不同的顺序发生在不同的 session 中,它们可能会死锁。

关于postgresql - 没有显式锁定的postgres死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042988/

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