| Documentation PostgreSQL 7.2 | ||
|---|---|---|
| <<< Previous | Next >>> | |
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é).
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.
![]() | 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.
| <<< Previous | Home | Next >>> |
| ANALYZE | Up | CHECKPOINT |