pgrowlocks
模块提供了一个函数来显示指定表的行锁定信息。
默认情况下,使用仅限于超级用户、具有 pg_stat_scan_tables
角色权限的角色以及对表具有 SELECT
权限的用户。
pgrowlocks(text) returns setof record
参数是表的名称。结果是一组记录,表中每个被锁定的行对应一行。输出列显示在表 F.20中。
表 F.20. pgrowlocks
输出列
名称 | 类型 | 描述 |
---|---|---|
locked_row |
tid |
锁定行的元组 ID (TID) |
locker |
xid |
锁定器的事务 ID,如果为多事务则为多事务 ID;请参阅第 66.1 节 |
multi |
boolean |
如果锁定器是多事务,则为 True |
xids |
xid[] |
锁定器的事务 ID(如果为多事务,则有多个) |
modes |
text[] |
锁定器的锁定模式(如果为多事务,则有多个),For Key Share 、For Share 、For No Key Update 、No Key Update 、For Update 、Update 的数组。 |
pids |
integer[] |
锁定后端的进程 ID(如果为多事务,则有多个) |
pgrowlocks
为目标表获取 AccessShareLock
,并逐行读取以收集行锁定信息。对于大型表,这不是很快速。请注意
如果在表上获取了 ACCESS EXCLUSIVE
锁,则 pgrowlocks
将被阻塞。
pgrowlocks
不保证生成自一致的快照。在其执行期间,可能会获取新的行锁或释放旧的锁。
pgrowlocks
不显示锁定行的内容。如果想同时查看行内容,您可以执行类似这样的操作
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p WHERE p.locked_row = a.ctid;
但请注意,这样的查询效率会非常低。
=# 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)
Tatsuo Ishii
如果您在文档中发现任何不正确、与您特定功能的使用体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。