↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
历史版本PostgreSQL 8.3 已于 2013 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

F.22. pgrowlocks — 显示表的行锁信息 #

pgrowlocks 模块提供了一个函数,用于显示指定表的行锁信息。

F.22.1. 概述

  pgrowlocks(text) returns setof record
  

参数为表名。结果是一个记录集合,其中表中每个被锁定的行对应结果中的一行。输出列如下:

表 F.25. pgrowlocks 输出列

名称 类型 描述
locked_row tid 被锁定行的元组 ID(TID)
lock_type text 共享锁为Shared,排他锁为 Exclusive
locker xid 持锁者的事务 ID;若为多事务,则为多事务 ID
multi boolean 如果锁持有者是多事务,则为 true
xids xid[] 锁持有者的事务 ID(若为多事务,则会有多个)
pids integer[] 加锁后端的进程 ID(若为多事务,则会有多个)

pgrowlocks 会对目标表获取 AccessShareLock, 并逐行读取以收集行锁信息。对于大表,这样做速度并不快。请注意:

  1. 如果整张表被其他人独占锁定, pgrowlocks 将被阻塞。

  2. pgrowlocks 并不保证给出一个自一致快照。在其执行期间, 可能会有新的行锁被获取,也可能有旧的锁被释放。

pgrowlocks 不显示被锁定行的内容。如果你想 同时查看这些行的内容,可以这样做:

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

不过要注意,(截至 PostgreSQL 8.3)这样的查询 效率会很低。

F.22.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.22.3. 作者

Tatsuo Ishii

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。