PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 16.2 » Internes » Traitement des transactions » Transactions et identifiants

74.1. Transactions et identifiants #

Les transactions peuvent être créées explicitement en utilisant BEGIN ou START TRANSACTION et elles sont terminées en utilisant COMMIT oyu ROLLBACK. Les requêtes SQL en dehors de transactions explicites utilisent automatiquement des transactions à une requête.

Chaque transaction est identifiée par un VirtualTransactionId unique (aussi appelé virtualXID ou vxid), qui est compris d'un identifiant du processus serveur (ou backendID) et d'un nombre local à chaque backend affecté séquentiellement, connu sous le nom de localXID. Par exemple, l'identifiant de transaction virtuelle 4/12532 a le backendID 4 et un localXID 12532.

Les TransactionId non virtuels (ou xid), par exemple 278394, sont affectés séquentiellement aux transactions à partir d'un compteur global utilisé par toutes les bases de données de l'instance PostgreSQL. Cette affectation survient quand une transaction écrit pour la première fois dans la base de données. Cela signifie que les xids avec une numérotation basse ont commencé à écrire avant les xids ayant une numérotation haute. Notez que l'ordre dans lequel les transactions réalisent leur première écriture en base peut être différent de l'ordre dans lequel les transactions ont démarré, tout particulièrement si la transaction a commencé avec des requêtes qui n'ont fait que des lectures dans la base.

Le type interne d'un identifiant de transaction, xid, est sur bits et boucle après 4 milliards de transaction. Un epoch sur 32 bit est incrémenté à chaque boucle. Il existe aussi un type xid8 sur 64 bits qui inclut cet epoch et, de ce fait, ne boucle pas pendant toute la vie d'une installation ; il peut être converti en xid. Les fonctions de Tableau 9.80 renvoient des valeurs de type xid8. Les xid sont utilisés comme base du mécanisme de concurrence MVCC de PostgreSQL ainsi que pour la réplication en flux.

Quand une transaction de niveau haut avec un xid (non virtuel) se valide, elle est marquée comme validée dans le sous-répertoire pg_xact. Des informations supplémentaires sont enregistrées dans le répertoire pg_commit_ts si track_commit_timestamp est activé.

En plus des vxid et xid, les transactions préparées se voient affectées des identifiants globaux, Global Transaction Identifiers (GID). Les GID sont des chaînes comprenant jusqu'à 200 octets. La correspondance GID vers xid est montrée dans pg_prepared_xacts.