PostgreSQLLa base de données la plus sophistiquée au monde.

Version anglaise

F.28. pgrowlocks

Le module pgrowlocks fournit une fonction pour afficher les informations de verrouillage de lignes pour une table spécifiée.

F.28.1. Aperçu

pgrowlocks(text) returns setof record
  

Le paramètre est le nom d'une table. Le résultat est un ensemble d'enregistrements, avec une ligne pour chaque ligne verrouillée dans la table. Les colonnes en sortie sont affichées dans Tableau F.21, « Colonnes de pgrowlocks ».

Tableau F.21. Colonnes de pgrowlocks

NomTypeDescription
locked_rowtidID de ligne (TID) d'une ligne verrouillée
lockerxidID de transaction de la pose du verrou, ou ID multixact dans le case d'une multi-transaction
multibooleanTrue si le verrou a été posé dans une multi-transaction
xidsxid[]ID de transaction des verrouilleurs (plus d'une dans le cas de multi-transaction)
modestext[]Mode de verrouillage des verrous (plus d'un dans le cas d'une transaction multiple), un tableau de Key Share, Share, For No Key Update, No Key Update, For Update, Update.
pidsinteger[]ID de processus des serveurs qui ont posé des verrous (plus d'une dans le cas des multi-transactions)

pgrowlocks prend un verrou AccessShareLock pour la table cible et lit chaque ligne une par une pour récupérer les informations de verrouillage de lignes. Ce n'est pas très rapide pour une grosse table. Notez que :

  1. Si la table entière est verrouillée exclusivement par quelqu'un d'autre, pgrowlocks sera bloqué.

  2. pgrowlocks isne garantie pas de produire une image cohérente. Il est possible qu'un nouveau verrou de ligne est pris ou qu'un ancien verrou est libéré lors de son exécution.

pgrowlocks ne montre pas le contenu des lignes verrouillées. Si vous voulez jeter un œil au contenu de la ligne en même temps, vous pouvez le faire ainso :

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

Faites attention au fait qu'une telle requête sera particulièrement inefficace.

F.28.2. Exemple d'affichage

=# 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.28.3. Auteur

Tatsuo Ishii