Les ID de transaction virtuelle ont le format "n/nnnn". Les vrais XID ne sont que des entiers. La première partie du xid virtuel est un identifiant backend unique à chaque connexion ; la deuxième partie est un identifiant de transaction temporaire attribué par le backend de cette connexion pour ses transactions.
Voir la définition de VirtualTransactionId
dans src/include/storage/lock.h
pour plus de détails.
Ces colonnes semblent correspondre au virtualxid
et/ou transactionid
et virtualtransaction
colonnes dans pg_locks
. Voir la documentation
.
Si j'ai raison, alors :
- "TX" est l'ID de transaction virtuelle de la transaction détenant ou attendant le verrou.
- "XID" est l'ID de transaction virtuelle de la transaction ciblée par la transaction en attente, si la cible est un xid virtuel. Dans PgAdmin, il peut également afficher le xid de la cible s'il s'agit d'un xid normal.
Les ID de transaction virtuelle sont des ID de transaction temporaires et transitoires que PostgreSQL alloue à chaque transaction au démarrage de la transaction. Ils ne sont pas enregistrés sur disque. Un xid réel n'est alloué que lorsque la transaction fait quelque chose qui nécessite une écriture transactionnelle sur le disque.
Selon le manuel lié :