Postgresql鎖的簡單介紹

2021-09-26 18:46:42 字數 1013 閱讀 9251

鎖主要是為了保持資料庫資料的一致性,可以阻止使用者修改一行或整個表,一般用在併發較高的資料庫中。

在多個使用者非同步訪問資料庫時,如果不對其進行限制可能會出現讀取資料和儲存資料的不一致性。

資料庫中有兩種基本的鎖:共享鎖(share)、排它鎖(exclusive)。

如果資料物件加上排它鎖,則其他的事務不能對它讀取修改

如果加上共享鎖,則該資料庫物件可以被其他事務讀取,但不能修改

鎖的基本語法:lock [ table ] name in lock_mode

即以某種模式去鎖定某張表,lock_mode有access share,row share, row exclusive, share update exclusive, share,share row exclusive,exclusive,access exclusive等,具體格式可參考:postgresql鎖模式

獲得鎖之後,鎖一般情況下都會繼續保持,並且總是在事務結束時釋放(包括事務提交和事務回滾)。

上述介紹通常是用於表級鎖,下面簡單介紹一下行級鎖。

與表級鎖不同的是,行級鎖不阻塞對於資料的查詢,行級鎖只是阻塞對同一行的寫入。

要在不修改某行的前提下請求乙個排斥行級鎖,用select for update選取該行。一旦我們請求了特定的行級鎖,就可以在事務中進行多次更新而不用擔心衝突。

要在某一行請求乙個共享行級鎖,用select for share選取該行。乙個共享鎖並不阻止其他的事務請求同乙個共享鎖,不過,其他事務不允許更新、刪除或者使用排斥鎖鎖住持有共享鎖的行。任何其他企圖都會被鎖住等待共享鎖的釋放。

改進PostgreSQL鎖機制

如果你想構建乙個大規模的 單憑橫向擴充套件web伺服器是遠遠不夠的。如何巧妙地管理資料庫也是非常必要的。在postgresql中,借助於併發性的改進,通過減少鎖及加速執行得到若干令人滿意的特性。如果你想構建乙個大規模的 單憑橫向擴充套件web伺服器是遠遠不夠的。如何巧妙地管理資料庫也是非常必要的。鎖...

測試postgreSQL中表鎖

檢視視窗連線到的服務程序的pid。select pg backend pid 三個視窗的pid分別如下 select locktype,relation regclass,virtualxid,transactionid,virtualtransaction pid,mode,granted fro...

postgresql解決鎖表

查詢是否鎖表了 select oid from pg class where relname 可能鎖表了的表 select pid from pg locks where relation 上面查出的oid 如果查詢到了結果,表示該錶被鎖 則需要釋放鎖定 select pg cancel backe...