pgrowlocks
| PostgreSQL 9.6.9 Documentation | |||
|---|---|---|---|
| Prev | Up | Appendix F. Additional Supplied Modules | Next | 
The pgrowlocks module provides a function to show row locking information for a specified table.
F.28.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-21 .
    
     Table F-21.
     
      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 | 
| multi | boolean | True if locker is a multitransaction | 
| xids | xid[] | Transaction IDs of lockers (more than one if multitransaction) | 
| lock_type | text[] | 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 . | 
| pids | integer[] | 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:
  
- 
    
If the table as a whole is exclusive-locked by someone else,
pgrowlockswill be blocked. - 
    
pgrowlocksis 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.28.2. Sample Output
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.28.3. Author
Tatsuo Ishii