Postgresql 中文操作指南
F.31. pgrowlocks — show a table’s row locking information #
pgrowlocks 模块提供了一个函数,以显示指定表的行锁定信息。
默认情况下,仅超级用户、具有 pg_stat_scan_tables 角色特权的角色以及对表具有 SELECT 权限的用户可以使用。
F.31.1. Overview #
pgrowlocks(text) returns setof record
该参数是一个表的名称。结果是一组记录,对于表中每一行锁定,都有一个行。输出列显示在 Table F.21中。
Table F.21. pgrowlocks Output Columns
Name |
Type |
Description |
locked_row |
tid |
已锁定行的元组 ID (TID) |
locker |
xid |
锁定者的事务 ID 或多重事务的 multixact ID;请参阅 Section 74.1 |
multi |
boolean |
对于多事务锁柜,为真 |
xids |
xid[] |
锁柜的事务 ID(如果为多事务,将有多个) |
modes |
text[] |
锁柜的锁定模式(如果为多事务,将有多个), Key Share 、 Share 、 For No Key Update 、 No Key Update 、 For Update 和 Update 数组。 |
pids |
integer[] |
锁定后端的进程 ID(如果为多事务,将有多个) |
pgrowlocks 将目标表的 AccessShareLock 作为参数,并逐一读取每行以收集行锁定信息。对于一张大表而言,这不是很快的方法。请注意:
pgrowlocks 不会显示锁定行的内容。如果您想要同时查看行内容,可以像这样操作:
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p
WHERE p.locked_row = a.ctid;
但是请注意,这样的查询效率会非常低。
F.31.2. Sample Output #
=# 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.31.3. Author #
Tatsuo Ishii