在我工作的項目中,有一個帶有「on update」觸發器的表,用於監視布爾列是否已更改(例如:false - > true =執行某個操作)。但是這個行爲只能連續進行一次。Postgresql併發
將有多個客戶端訪問數據庫,所以我可以假設最終,多個客戶端將嘗試並行更新同一行列。
「更新」觸發器本身是否處理併發本身,或者我需要在事務中執行並手動鎖定表?
在我工作的項目中,有一個帶有「on update」觸發器的表,用於監視布爾列是否已更改(例如:false - > true =執行某個操作)。但是這個行爲只能連續進行一次。Postgresql併發
將有多個客戶端訪問數據庫,所以我可以假設最終,多個客戶端將嘗試並行更新同一行列。
「更新」觸發器本身是否處理併發本身,或者我需要在事務中執行並手動鎖定表?
觸發器無法處理併發性,無論您是否使用顯式事務,PostgreSQL都應該做正確的事情。
PostgreSQL使用樂觀鎖定這意味着第一個實際更新行的人在該行上獲取鎖定。如果第二個人試圖更新該行,他們的更新語句將等待第一個人是否提交更改或回滾。
如果第一個人提交,第二個人會得到一個錯誤,而不是他們的變化,並消除他們可能感興趣的變化。
如果第一個人回滾,第二個人的更新解除阻塞並且正常通過,因爲現在它不會覆蓋任何東西。
第二個人也可以使用NOWAIT
選項,如果它們的更新與未解決的更改衝突,就會立即發生錯誤而不是阻塞。
+1使用「消除」一詞。 – swasheck 2012-01-26 23:15:40
當有許多觸發器同時激活時,您是否觀察到任何顯着的性能下降? – ady 2015-05-11 11:41:47