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 procNumber
) 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 procNumber
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.82 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
.