【问题标题】:PostgreSQL deadlocks on two table locksPostgreSQL 在两个表锁上死锁
【发布时间】:2013-10-22 19:27:07
【问题描述】:

我正在锁定两个没有互连列的不同表,但我仍然遇到死锁。

这是服务器日志:

2013-10-22 15:16:19 EDT ERROR:  deadlock detected
2013-10-22 15:16:19 EDT DETAIL:  Process 26762 waits for AccessExclusiveLock on relation 39913 of database 39693; blocked by process 26761.
    Process 26761 waits for RowExclusiveLock on relation 40113 of database 39693; blocked by process 26762. 
    Process 26762: lock table par_times in access exclusive mode
    Process 26761: INSERT INTO cached_float (entry_id, figure_type, value) VALUES (33225, 1, 54.759402056277075) RETURNING cached_float.id

有什么想法吗?

【问题讨论】:

  • 请提供更多详细信息。 Postgres 的版本?您锁定了哪些表以及如何锁定?

标签: postgresql concurrency locking deadlock


【解决方案1】:

您可以通过检查此处显示的数字来进行调试:

进程 26762 在关系 39913 上等待 AccessExclusiveLock 数据库 39693;被进程 26761 阻止。 进程 26761 在数据库的关系 40113 上等待 RowExclusiveLock 39693;被进程 26762 阻止。

在您的数据库中运行:

SELECT 39913::regclass AS tbl1, 40113::regclass AS tbl2

查看相关表格。还要考虑相关表上的任何触发器和可能的外键约束。

通常:手动锁定表不一定能防止死锁。这可能是导致僵局的原因

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多