我有一個表稱爲deposits
PostgreSQL的鎖的控制時間等待
當存款製成,表被鎖定,所以查詢看起來是這樣的:
SELECT * FROM deposits WHERE id=123 FOR UPDATE
我認爲FOR UPDATE
是鎖定表,以便我們可以操作它,而無需另一個線程跺腳數據。
雖然其他存款試圖獲取表的鎖,但會出現問題。發生什麼事情是,在鎖定桌子和撥打psql_commit()
之間的某個地方發生了一些故障,並且鎖定了愚蠢的長時間。有一對夫婦的事情,我需要幫助解決:
試圖獲得鎖失靈的後續查詢,我試圖與
NOWAIT
實現這一點,但希望有一個超時方法(因爲它可能是確定等待,只是不等待一個'愚蠢的時間')理想情況下,我會在通過這頭,並讓我的初始查詢只保持鎖定一段時間,這是可能與postgresql?
是否有一些其他的魔術功能,我可以在查詢(類似於NOWAIT),這將只有等待4秒鎖之前失敗?
由於代碼庫的痛苦單片面條代碼的性質,它不是簡單的一個不斷變化的全球CONFIGS的事,它有點需要一個每個基於查詢的解決方案
感謝您的幫助夥計們,我會繼續探索,但我沒有太多的運氣。這是PSQL的一個不存在的功能,因爲我發現這一點:http://www.postgresql.org/message-id/[email protected]
定義「愚蠢的長」。另外:PostgreSQL版本?你的錯誤日誌中是否有任何PostgreSQL死鎖錯誤? –
stupidly long = 30秒| 9.2.6是版本。 – FaddishWorm
僅供參考,「死鎖」具有特定的含義:兩個交易,其中每個等待由另一個持有的鎖。PostgreSQL將檢測到這種情況並中止一個事務。你描述的情況不是一個僵局,而是一個無限期的等待。 –