pgrowlocks
模組提供一個函數,用於顯示指定表格的資料列鎖定資訊。
預設情況下,使用權限僅限於超級使用者、具有 pg_stat_scan_tables
角色權限的角色,以及對表格具有 SELECT
權限的使用者。
pgrowlocks(text) returns setof record
參數是表格的名稱。 結果是一組記錄,表格中每個鎖定的資料列對應一個資料列。 輸出欄位顯示在表格 F.20中。
表格 F.20. pgrowlocks
輸出欄位
名稱 | 類型 | 說明 |
---|---|---|
locked_row |
tid |
已鎖定資料列的 Tuple ID (TID) |
locker |
xid |
鎖定者的交易 ID,或如果是多重交易,則是 multixact ID;請參閱章節 66.1 |
multi |
boolean |
如果鎖定者是多重交易,則為 True |
xids |
xid[] |
鎖定者的交易 ID (如果是多重交易,則有多個) |
modes |
text[] |
鎖定者的鎖定模式 (如果是多重交易,則有多個),一個 For Key Share 、For Share 、For No Key Update 、No Key Update 、For Update 、Update 的陣列。 |
pids |
integer[] |
鎖定後端的程序 ID (如果是多重交易,則有多個) |
pgrowlocks
取得目標表格的 AccessShareLock
,並逐一讀取每個資料列以收集資料列鎖定資訊。 對於大型表格來說,這不是很快速。 請注意
如果在表格上取得 ACCESS EXCLUSIVE
鎖定,pgrowlocks
將會被封鎖。
pgrowlocks
無法保證產生自我一致的快照。 在執行期間,可能會取得新的資料列鎖定,或者釋放舊的鎖定。
pgrowlocks
不會顯示鎖定的資料列的內容。 如果您想要同時查看資料列內容,您可以執行如下操作
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p WHERE p.locked_row = a.ctid;
但是請注意,這樣的查詢效率會非常低。
=# SELECT * FROM pgrowlocks('t1'); locked_row | locker | multi | xids | modes | pids ------------+--------+-------+-------+----------------+-------- (0,1) | 609 | f | {609} | {"For Share"} | {3161} (0,2) | 609 | f | {609} | {"For Share"} | {3161} (0,3) | 607 | f | {607} | {"For Update"} | {3107} (0,4) | 607 | f | {607} | {"For Update"} | {3107} (4 rows)
Tatsuo Ishii
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。