我有一個應用程序讀取現有PostgreSQL 9.1數據庫的結構,將其與「應該」狀態進行比較並相應地更新數據庫。這在大多數情況下都可以正常工作。但是,當我讀取當前數據庫結構時,我有幾個實例死鎖。負責查詢讀取現有的外鍵:爲什麼這個查詢會死鎖?
SELECT tc.table_schema, tc.table_name, tc.constraint_name, kcu.column_name,
ccu.table_schema, ccu.table_name, ccu.column_name
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
WHERE constraint_type = 'FOREIGN KEY'
查看服務器狀態在pgAdmin的顯示這是已在服務器上運行的唯一活動查詢/交易。儘管如此,查詢不會返回。
該錯誤以一種方式重現:當我找到一個產生錯誤的數據庫時,每次都會產生錯誤。但並非所有數據庫都會產生錯誤。這是一個神祕的錯誤,我還沒有辦法嘗試或嘗試解決這個問題。所以任何輸入或想法都非常感謝! PS:我的一個同事剛剛報告他使用PostgreSQL 8.4產生了同樣的錯誤。
我的機器上的測試數據庫需要約8秒的時間,大約有700個表。嘗試使用EXPLAIN來查看查詢是如何執行的並查看所有成本。 –
@Frank,謝謝!沒有想到EXPLAIN,並會在下次出現錯誤時嘗試。但目前,這不是關於運行時間,而是顯然是一個僵局。查詢需要1.5secs在我的數據庫...如果它返回。 – Robin