pgrowlocks
模块提供了一个函数来显示一个指定表的行锁定信息。
默认情况下,使用仅限于超级用户、pg_stat_scan_tables
角色的成员和在该表上拥有SELECT
权限的用户。
pgrowlocks(text) 返回 setof record
参数是一个表的名称。结果是一个记录集合,其中每一行对应表中一个被锁定的行。输出列如表 F.20所示。
表 F.20. pgrowlocks
输出列
名称 | 类型 | 描述 |
---|---|---|
locked_row
|
tid
|
被锁定行的元组 ID(TID) |
locker
|
xid
|
持锁者的事务 ID,如果是多事务则为多事务 ID |
multi
|
boolean
|
如果持锁者是一个多事务,则为真 |
xids
|
xid[]
|
持锁者的事务 ID(如果是多事务则多于一个) |
modes
|
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;
不过要注意,这样一个查询将非常低效。
=# 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)
F.36.1. refint — 用于实现参照完整性的函数F.36.2. autoinc — 用于自增域的函数F.36.3. insert_username — 用于跟踪谁修改了...
SQL SELECT TOP 子句SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录...
SQL INSERT INTO SELECT 语句通过 SQL,您可以从一个表复制信息到另一个表。 INSERT INTO SELECT 语句从一个表复制数据,然...
SQL RIGHT JOIN 关键字SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。...
SQL NULL 函数SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数 请看下面的 "Products" 表: P_Id ProductName UnitPrice Unit...
SQL Server DATEADD() 函数 SQL Server Date 函数定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔。 语法DATEADD(da...
SQL HAVING 子句HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与 Aggregate 函数一起使用。 ...
我们知道从MySQL表中使用SQL SELECT 语句来读取数据。如果我们需要对读取的数据进行排序,我们就可以使用MySQL的 ORDER BY ...
DROP PROCEDURE IF EXISTS FillDateTable;delimiter //CREATE PROCEDURE FillDateTable()LANGUAGE SQLNOT DETERMINISTICCONTAINS...
创建MySQL数据表需要以下信息:表名表字段名定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_nam...