PostgreSQL 9.3.1 中文手册 | ||||
---|---|---|---|---|
Prev | Up | Appendix F. 额外提供的模块 | Next |
pgrowlocks模块提供一个显示指定的表的行锁定信息的函数。
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起),这样一个查询将会是非常低效率的。
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)
Tatsuo Ishii