BEGIN

Nom

BEGIN — débute une transaction en mode chaîné
  
BEGIN [ WORK | TRANSACTION ]
  

Entrées

Aucune.

Sorties

BEGIN

Signifie qu'une nouvelle transaction a commencé.

NOTICE: BeginTransactionBlock and not in default state

indique qu'une transaction est déja en cours. Celle-ci n'est pas affectée.

Description

Par défaut, Postgres exécute les transactions en mode non chaîné (également connu sous "autocommit" dans d'autres systèmes de bases de données). En d'autres termes, chaque commande utilisateur est exécutée dans sa propre transaction et une validation est lancée implicitement à la fin de la commande (si l'exécution a eu lieu, sinon une annulation est faite). BEGINinitie une transaction utilisateur en mode chaîné i.e. toutes les opérations utilisateur après BEGIN seront exécutées dans une transaction unique jusqu'à un COMMIT ou ROLLBACK explicite, ou que la transaction prenne fin. Les opérations en mode chaîné sont exécutées plus rapidement, parce que la transaction start/commit nécessite plus d'activité processeur et disque. L'exécution de multiple commandes dans une transaction est aussi requise pour la consistence lors de la modification de plusieurs tables rattachées.

Le niveau d'isolation de transaction par défaut dans Postgres est READ COMMITTED, où les requêtes dans la transaction ne voient que les changements validés avant l'exécution de la requête. Ainsi, vous utiliserez SET TRANSACTION ISOLATION LEVEL SERIALIZABLE juste après BEGIN si vous avez besoin d'une isolation de transaction plus rigoureuse. En mode SERIALIZABLE les requêtes ne verront que les changements validés avant que la transaction débute (actuellement, avant l'exécution du premier DML dans une transaction sérialisable).

Si la transaction est validée, Postgres vérifiera soit que toutes les mises à jour sont faites, soit que rien n'a été fait. Les transactions ont les caractéristiques ACID (atomicité, cohérence, isolation, durabilité).

Notes

Le mot-clé TRANSACTION est juste une alternative (cosmétique) à WORK. Aucun mot-clé nécessite d'être spécifié.

Voir la clause LOCK pour plus d'information sur le verrouillage des tables dans une transaction.

Utilisez COMMIT ou ROLLBACK pour terminer une transaction.

Utilisation

Pour commencer une transaction utilisateur :
BEGIN WORK;
  

Compatibilité

BEGIN est une extension du langage Postgres.

SQL92

Il n'existe pas de commande BEGIN WORK explicite en SQL92 ; l'initiation d'une transaction est toujours implicite et se termine soit avec un COMMIT soit avec un ROLLBACK.

Note

Certains systèmes de bases de données relationnelles ont une fonctionnalité auto-commit comme commodité.

SQL92 nécessite aussi que SERIALIZABLE soit le niveau d'isolation de transaction par défaut.