F.27. pgrowlocks
pgrowlocks
模块提供一个显示指定的表的行锁定信息的函数。
F.27.1. 概述
pgrowlocks(text) returns setof record
该参数是一个表的名字。结果是一组记录,一行代表表中的一个锁定的行。 输出字段在Table F-19中显示。
Table F-19. pgrowlocks
输出字段
名字 | 类型 | 描述 |
---|---|---|
locked_row |
tid |
锁定的行的元组 ID (TID) |
locker |
xid |
锁定的事务 ID,或如果是多事务则为 multixact ID |
multi |
boolean |
如果锁定的是多事务则为真 |
xids |
xid[] |
锁定的事务 ID(如果有多个事务则为多个) |
lock_type |
text[] |
锁定的锁模式 (如果有多个事务则为多个), 一些 Key Share , Share , For No Key Update , No Key Update , For Update , Update 。 |
pids |
integer[] |
锁定后端的过程 ID (如果有多个事务则为多个) |
pgrowlocks
将AccessShareLock
作为目标表, 并且一行一行的读取行以采集行锁的信息。这对于大表来说不是非常快。请注意;
如果表作为一个整体是被他人排他锁的,那么
pgrowlocks
将被阻塞。pgrowlocks
不保证生成一个自我一致的快照。 在执行期间,获得一个新的行锁或释放一个旧锁都是可能的。
pgrowlocks
并不显示锁定的行的内容。 如果你希望同一时间查看行的内容,你可以像下面这样做:
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p
WHERE p.locked_row = a.ctid;
不论如何都要小心(自PostgreSQL 8.3起),这样一个查询将会是非常低效率的。
F.27.2. 示例输出
test=# SELECT * FROM pgrowlocks('t1');
locked_row | lock_type | locker | multi | xids | pids
------------+-----------+--------+-------+-----------+---------------
(0,1) | Shared | 19 | t | {804,805} | {29066,29068}
(0,2) | Shared | 19 | t | {804,805} | {29066,29068}
(0,3) | Exclusive | 804 | f | {804} | {29066}
(0,4) | Exclusive | 804 | f | {804} | {29066}
(4 rows)
F.27.3. 作者
Tatsuo Ishii