2013-10-22 159 views
1

我鎖定了兩個不具有互連列的不同表,但仍然出現死鎖。PostgreSQL在兩個表鎖上的死鎖

這裏是服務器日誌:

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 

任何想法,爲什麼?

+2

請詳細說明。 Postgres的版本?你鎖定哪張桌子? –

回答

2

您可以通過檢查此處顯示的數字調試這樣的:在關係

過程26762個等待AccessExclusiveLock 數據庫 39693;被進程26761阻止。 進程26761等待RowExclusiveLock關係數據庫 39693;在你的數據庫阻止過程26762.

運行:

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

看到相關表。還要考慮涉及表上的任何觸發器和可能的外鍵約束。

通常:手動鎖定表不一定會防止死鎖。它可能是導致死鎖的導致開始。