我們有一個基於Web的應用程序。在應用程序中有時間限制的數據庫操作(INSERT和UPDATE)需要更多時間才能完成,因此此特定流程已更改爲Java線程,因此不會等待(阻止)完成完整的數據庫操作。INSERT語句中的死鎖錯誤
我的問題是,如果超過1個用戶遇到這一特定流程,我面臨PostgreSQL可以拋出以下錯誤:
org.postgresql.util.PSQLException: ERROR: deadlock detected
Detail: Process 13560 waits for ShareLock on transaction 3147316424; blocked by process 13566.
Process 13566 waits for ShareLock on transaction 3147316408; blocked by process 13560.
上述錯誤在INSERT語句中始終拋出。
附加信息: 1)我有本表中定義的PRIMARY KEY。 2)本表中有FOREIGN KEY引用。 3)單獨的數據庫連接被傳遞給每個Java線程。
技術 Web服務器:Tomcat的v6.0.10 的Java V1.6.0 Servlet的 數據庫:在PostgreSQL v8.2.3 連接管理:pgpool II
其他信息對診斷問題將有所幫助。您能否提供特定的外鍵約束,關於表模式的一些基本信息以及導致死鎖的實際SQL語句? – 2009-10-05 14:38:24