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
est un synonyme de BEGIN
.
COMMIT
et 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 supplémentaires de compatibilité.
L'option DEFERRABLE
de mode_transaction
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.