支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

F.29. pgrowlocks — 顯示表格的資料列鎖定資訊 #

pgrowlocks 模組提供一個函數,用於顯示指定表格的資料列鎖定資訊。

預設情況下,使用權限僅限於超級使用者、具有 pg_stat_scan_tables 角色權限的角色,以及對表格具有 SELECT 權限的使用者。

F.29.1. 概述 #

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 ShareFor ShareFor No Key UpdateNo Key UpdateFor UpdateUpdate 的陣列。
pids integer[] 鎖定後端的程序 ID (如果是多重交易,則有多個)

pgrowlocks 取得目標表格的 AccessShareLock,並逐一讀取每個資料列以收集資料列鎖定資訊。 對於大型表格來說,這不是很快速。 請注意

  1. 如果在表格上取得 ACCESS EXCLUSIVE 鎖定,pgrowlocks 將會被封鎖。

  2. pgrowlocks 無法保證產生自我一致的快照。 在執行期間,可能會取得新的資料列鎖定,或者釋放舊的鎖定。

pgrowlocks 不會顯示鎖定的資料列的內容。 如果您想要同時查看資料列內容,您可以執行如下操作

SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p
  WHERE p.locked_row = a.ctid;

但是請注意,這樣的查詢效率會非常低。

F.29.2. 範例輸出 #

=# 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)

F.29.3. 作者 #

Tatsuo Ishii

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來報告文件問題。