我需要鎖定一個用戶的行,以防止任何其他人更改內容。PostgreSQL - 如何在函數中創建關鍵部分
User A: call function lock_row() to lock row X
User B: call function lock_row() to lock row X (lock cant be created and "exception" should be triggered as row X is already locked)
當用戶A和B使用同一個會話連接時,情況並非如此。
因此,如何確保這樣的事情不會發生了:
User A: check if lock == 0
User B: check if lock == 0
User A: lock == 0 so SET lock = 1
User B: lock == 0 is also here so SET lock = 1
我想通過觸發的SQL語句不能直接創建鎖(上排UPDATE),而是功能,允許用戶釋放鎖出現意外錯誤。
如何創建「關鍵部分」?如何確保我函數中的關鍵部分能夠正確執行?
PostgreSQL版本9.x.
https://www.postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS –
主要Postgres版本包括點後的第一個數字。沒有「9.x」版本,它是9.4或9.5等。 –