Postgresql
PostgreSQL 觸發更新函式鎖機制
我對數據庫管理和 PostgreSQL 還很陌生,有些東西我並不熟悉,儘管我已經閱讀了很多 PostgreSQL 文件。
這是我的問題中表格的簡化版本:
USERS_PRODUCTS 表
產品表
在 USER_PRODUCT 行的每個 UPDATE 上,都會觸發一個函式,在相應的 PRODUCT 行上發送一個 UPDATE(owned_count 或 wished_count 列中的 +/- 1)。
當多個使用者在同一個產品 ID 上設置所有權(失去更新)時,我期望觸發的函式會引入一些關於並發的問題,但是經過一些負載測試,似乎沒有任何問題,沒有任何顯式鎖定。
所以我的問題是**我不明白什麼並發機制在起作用以避免這些失去的更新。**對我來說這看起來很神奇,我不能在不理解的情況下將其推向生產。
我在文件中沒有找到有關觸發更新和鎖定機制的任何內容,歡迎提供所有幫助(連結到文件、事實、想法)。
編輯:這是一個包含所有必要數據的dbfiddle
魔術被稱為“行鎖”。計數器列上的更新是由行鎖序列化的,因此不會有任何競爭條件。如果您在單個
UPDATE
語句中讀取和寫入數據,則永遠不會發生失去更新。