2014-10-10 71 views
0

我正在執行一些測試來評估我們DAO層的框架。其中一個測試用例是複製表鎖並檢查框架在這種情況下的行爲。這些測試使用Java和主要JPA完成,使用Hibernate和EclipseLink作爲JPA供應商,我們也單獨使用Hibernate,並且我們有一組接口作爲框架的橋樑,以減輕我們對任何其他ORM框架的測試。如何定義Postgres 9.0的鎖定等待時間?

我已經成功地爲我們的MySQL 5.5.11數據庫生成了表鎖定測試用例,這是因爲運行測試用例的應用程序剛被凍結了50秒(MySQL中鎖等待時間的默認值),然後發生了與SQLException相關的問題在日誌中出現表鎖定等待超時異常。然後我切換測試的配置以連接到Postgres 9.0並重新執行測試,我可以複製表鎖,但是現在應用程序剛被凍結了10分鐘,並且沒有拋出異常,所以我必須停止測試執行。

我正在尋找如何改變Postgres 9.0的這個時間,並得到Postgres 9.3在這裏的結果:Client Connection Defaults under lock_timeout。然後我檢查了9.0的文檔,並且此參數不可用。你知道我怎麼能在postgres配置或我的Java客戶端應用程序中更改它,可能是JPA或Hibernate或EclipseLink特定配置,只是爲了檢查數據庫中的表鎖異常?最糟糕的情況是在生產環境中出現表鎖,除非應用程序停止(我們正在與框架一起測試),否則我們無法從此恢復。

回答

2

嘗試statement_timeout - 它已經存在很久了。

SET statement_timeout=1000; 
-- try to take lock, and get an exception 1000ms later 
+0

這很相似,但它不一樣。我沒有得到鎖表異常,但我想這是我能得到的最接近這個版本的Postgres的。 – 2014-10-10 17:35:51

+0

如果你所關心的只是鎖定錯誤而不是超時,那麼你可以在你的鎖定嘗試中加入'NOWAIT'。 – 2014-10-10 17:48:07

+0

是的,這是你最接近9.0的最接近的。升級時間。 – 2014-10-11 14:30:49