历史版本。 PostgreSQL 9.0 已结束支持。 2015-10-08. 请参阅 当前版本手册.
F.27. pgrowlocks — 显示表的行锁信息 #
pgrowlocks 模块提供了一个函数,用于显示指定表的行锁信息。
F.27.1. 概述
pgrowlocks(text) returns setof record
参数为表名。结果是一个记录集合,其中表中每个被锁定的行对应结果中的一行。输出列见表 F.19。
表 F.19. pgrowlocks output columns
| Name | Type | Description |
|---|---|---|
locked_row | tid | Tuple ID (TID) of locked row |
lock_type | text | Shared for shared lock, or
Exclusive for exclusive lock |
locker | xid | Transaction ID of locker, or multixact ID if multi-transaction |
multi | boolean | 如果锁持有者是多事务,则为 true |
xids | xid[] | 锁持有者的事务 ID(若为多事务,则会有多个) |
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. Sample output
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