BEGIN

Name

BEGIN  --  Débute un bloc de transaction

Synopsis

  
BEGIN [ WORK | TRANSACTION ]
  

Entrées

WORK, TRANSACTION

Mots-clé optionnels. Ils n'ont pas d'effet.

Sorties

BEGIN

Signifie qu'une nouvelle transaction a commencé.

NOTICE: BEGIN: already a transaction in progress

Indique qu'une transaction est déja en cours. La transaction en cours 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, 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 multiples 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

Voir 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é

SQL92

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

Note

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

Incidemment, le mot-clé BEGIN est utilisé dans un sens différent dans le SQL embarqué. Vous êtes prévenus de faire attention à la sémantique de la transaction quand vous faites un portage des applications de la base.

SQL92 nécessite aussi SERIALIZABLE comme niveau d'isolation de transaction par défaut.