BEGIN — Débuter un bloc de transaction
BEGIN [ WORK | TRANSACTION ] [mode_transaction
[, ...] ] oùmode_transaction
peut être : ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY [ NOT ] DEFERRABLE
BEGIN
initie un bloc de transaction, c'est-à-dire que
toutes les instructions apparaissant après la commande BEGIN
sont
exécutées dans une seule transaction jusqu'à ce qu'un
COMMIT
ou ROLLBACK
explicite soit exécuté.
Par défaut (sans BEGIN
),
PostgreSQL exécute les
transactions en mode « autocommit », c'est-à-dire que chaque
instruction est exécutée dans sa propre transaction et une validation
(commit) est traitée implicitement à la fin de l'instruction (si l'exécution
a réussi, sinon une annulation est exécutée).
Les instructions sont exécutées plus rapidement dans un bloc de transaction parce que la séquence début/validation de transaction demande une activité significative du CPU et du disque. L'exécution de plusieurs instructions dans une transaction est aussi utile pour s'assurer d'une cohérence lors de la réalisation de certains modifications liées : les autres sessions ne voient pas les états intermédiaires tant que toutes les mises à jour ne sont pas réalisées.
Si le niveau d'isolation, le mode lecture/écriture ou le mode différable
sont spécifiés, la nouvelle transaction possède ces caractéristiques, comme
si SET TRANSACTION
était exécutée.
WORK
TRANSACTION
Mots clés optionnels. Ils n'ont pas d'effet.
SET TRANSACTION présente la signification des autres paramètres de cette instruction.
START TRANSACTION
a la même fonctionnalité que BEGIN
.
COMMIT
ou
ROLLBACK
sont utilisés
pour terminer un bloc de transaction.
Lancer BEGIN
en étant déjà dans un bloc de transaction
provoque l'apparition d'un message d'avertissement, mais l'état de la
transaction n'en est pas affecté. Pour intégrer des transactions à
l'intérieur d'un bloc de transaction, les points de sauvegarde sont
utilisés (voir SAVEPOINT).
Pour des raisons de compatibilité descendante, les virgules entre chaque
mode_transaction
peuvent être
omises.
Commencer un bloc de transaction :
BEGIN;
BEGIN
, qui est une extension
PostgreSQL, est équivalent à la commande
START TRANSACTION
du standard SQL. La page de référence de cette commande contient des
informations de compatibilité supplémentaires.
L'option DEFERRABLE
de
transaction_mode
est une extension de PostgreSQL.
Le mot clé BEGIN
est utilisé dans un but
différent en SQL embarqué. La sémantique de la transaction doit être étudiée
avec précaution lors du portage d'applications.