From 5e45211a64149b3c659b90ff2de6fa982a5a93ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 14:17:33 +0200 Subject: Adding upstream version 15.5. Signed-off-by: Daniel Baumann --- doc/src/sgml/html/pgrowlocks.html | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 doc/src/sgml/html/pgrowlocks.html (limited to 'doc/src/sgml/html/pgrowlocks.html') diff --git a/doc/src/sgml/html/pgrowlocks.html b/doc/src/sgml/html/pgrowlocks.html new file mode 100644 index 0000000..54e4e0b --- /dev/null +++ b/doc/src/sgml/html/pgrowlocks.html @@ -0,0 +1,51 @@ + +F.31. pgrowlocks

F.31. pgrowlocks

+ The pgrowlocks module provides a function to show row + locking information for a specified table. +

+ By default use is restricted to superusers, roles with privileges of the + pg_stat_scan_tables role, and users with + SELECT permissions on the table. +

F.31.1. Overview

+pgrowlocks(text) returns setof record
+

+ The parameter is the name of a table. The result is a set of records, + with one row for each locked row within the table. The output columns + are shown in Table F.19. +

Table F.19. pgrowlocks Output Columns

NameTypeDescription
locked_rowtidTuple ID (TID) of locked row
lockerxidTransaction ID of locker, or multixact ID if multitransaction
multibooleanTrue if locker is a multitransaction
xidsxid[]Transaction IDs of lockers (more than one if multitransaction)
modestext[]Lock mode of lockers (more than one if multitransaction), + an array of Key Share, Share, + For No Key Update, No Key Update, + For Update, Update.
pidsinteger[]Process IDs of locking backends (more than one if multitransaction)

+ pgrowlocks takes AccessShareLock for the + target table and reads each row one by one to collect the row locking + information. This is not very speedy for a large table. Note that: +

  1. + If an ACCESS EXCLUSIVE lock is taken on the table, + pgrowlocks will be blocked. +

  2. + pgrowlocks is not guaranteed to produce a + self-consistent snapshot. It is possible that a new row lock is taken, + or an old lock is freed, during its execution. +

+ pgrowlocks does not show the contents of locked + rows. If you want to take a look at the row contents at the same time, you + could do something like this: + +

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

+ + Be aware however that such a query will be very inefficient. +

F.31.2. Sample Output

+=# 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.31.3. Author

+ Tatsuo Ishii +

\ No newline at end of file -- cgit v1.2.3