我正在锁定两个没有互连列的不同表,但我仍然陷入僵局。
这是服务器日志:
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
任何想法为什么?
答案 0 :(得分:2)
您可以通过查看此处显示的数字进行调试:
进程26762在关系 39913 上等待AccessExclusiveLock 数据库39693;被进程26761阻止。 进程26761在数据库的 40113 关系上等待RowExclusiveLock 39693;被流程26762阻止。
在您的数据库中运行:
SELECT 39913::regclass AS tbl1, 40113::regclass AS tbl2
查看相关表格。还要考虑所涉及的表格上的任何触发器和可能的外键约束。
通常:手动锁定表不一定能防止死锁。它可能是开始时死锁的原因。