F.44. pgrowlocks — show a table's row locking information | ||||
---|---|---|---|---|
Prev | Up | Appendix F. Additional Supplied Modules and Extensions Shipped inpostgrespro-std-17-contrib | Home | Next |
F.44. pgrowlocks — show a table's row locking information#
Thepgrowlocks
module provides a function to show row locking information for a specified table.
By default use is restricted to superusers, roles with privileges of thepg_stat_scan_tables
role, and users withSELECT
permissions on the table.
F.44.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 inTable F.25.
Table F.25. pgrowlocks
Output Columns
Name | Type | Description |
---|---|---|
locked_row | tid | Tuple ID (TID) of locked row |
locker | xid | Transaction ID of locker, or multixact ID if multitransaction; seeSection 64.1 |
multi | boolean | True if locker is a multitransaction |
xids | xid[] | Transaction IDs of lockers (more than one if multitransaction) |
modes | text[] | Lock mode of lockers (more than one if multitransaction), an array ofFor Key Share ,For Share ,For No Key Update ,No Key Update ,For Update ,Update . |
pids | integer[] | Process IDs of locking backends (more than one if multitransaction) |
pgrowlocks
takesAccessShareLock
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:
If an
ACCESS EXCLUSIVE
lock is taken on the table,pgrowlocks
will be blocked.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.44.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.44.3. Author#
Tatsuo Ishii