Hi, 

while playing a bit with pg_locks I came across this:

https://www.postgresql.org/docs/current/view-pg-locks.html

"Although tuples are a lockable type of object, information about row-level 
locks is stored on disk, not in memory, and therefore row-level locks normally 
do not appear in this view. If a process is waiting for a row-level lock, it 
will usually appear in the view as waiting for the permanent transaction ID of 
the current holder of that row lock."

Given this? (I've just updated the same row in two transactions):

postgres=# select 
locktype,database::regdatabase,relation::regclass,pid,mode,granted,waitstart,page,tuple
 from pg_locks where pid != pg_backend_pid() order by pid;
   locktype    | database | relation | pid  |       mode       | granted |      
     waitstart           | page | tuple 
---------------+----------+----------+------+------------------+---------+-------------------------------+------+-------
 relation      | postgres | t        | 9673 | RowExclusiveLock | t       |      
                         |      |      
 virtualxid    |          |          | 9673 | ExclusiveLock    | t       |      
                         |      |      
 transactionid |          |          | 9673 | ExclusiveLock    | t       |      
                         |      |      
 virtualxid    |          |          | 9691 | ExclusiveLock    | t       |      
                         |      |      
 transactionid |          |          | 9691 | ShareLock        | f       | 
2026-01-08 09:58:38.867534+01 |      |      
 tuple         | postgres | t        | 9691 | ExclusiveLock    | t       |      
                         |    0 |     5
 transactionid |          |          | 9691 | ExclusiveLock    | t       |      
                         |      |      
 relation      | postgres | t        | 9691 | RowExclusiveLock | t       |      
                         |      |      
(8 rows)

... I am wondering if that paragraph is still true or at least needs some 
adjustments to explain what "normally" and "usually" means? There clearly is 
information about the tuple and the row level lock.

Regards
Daniel

Reply via email to