SAVEPOINT — définit un nouveau point de sauvegarde à l'intérieur de la transaction en cours
SAVEPOINT nom_pointsauvegarde
SAVEPOINT
établit un nouveau point de sauvegarde à
l'intérieur de la transaction en cours.
Un point de sauvegarde est une marque spéciale à l'intérieur d'une transaction qui autorise l'annulation de toutes les commandes exécutées après son établissement, restaurant la transaction dans l'état où elle était au moment de l'établissement du point de sauvegarde.
nom_pointsauvegarde
Le nom du nouveau point de sauvegarde. Si des points de sauvegarde de même nom existent déjà, ils deviendront inaccessibles jusqu'à ce que les points de sauvegarde de même nom mais plus récents ne soient libérés.
Utilisez ROLLBACK TO
pour annuler un point de sauvegarde. Utilisez RELEASE SAVEPOINT
pour détruire un point de sauvegarde, conservant l'effet des commandes
exécutées après son établissement.
Les points de sauvegarde peuvent seulement être établis à l'intérieur d'un bloc de transaction. Plusieurs points de sauvegarde peuvent être définis dans une transaction.
Pour établir un point de sauvegarde et annuler plus tard les effets des commandes exécutées après son établissement :
BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT mon_pointsauvegarde; INSERT INTO table1 VALUES (2); ROLLBACK TO SAVEPOINT mon_pointsauvegarde; INSERT INTO table1 VALUES (3); COMMIT;
La transaction ci-dessus insère les valeurs 1 et 3, mais pas 2.
Pour établir puis détruire un point de sauvegarde :
BEGIN; INSERT INTO table1 VALUES (3); SAVEPOINT mon_pointsauvegarde; INSERT INTO table1 VALUES (4); RELEASE SAVEPOINT mon_pointsauvegarde; COMMIT;
La transaction ci-dessus insère à la fois les valeurs 3 et 4.
Pour utiliser un seul point de transaction :
BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (3); -- rollback jusqu'au deuxième point de sauvegarde ROLLBACK TO SAVEPOINT my_savepoint; SELECT * FROM table1; -- affiche les lignes 1 et 2 -- libère le deuxième point de sauvegarde RELEASE SAVEPOINT my_savepoint; -- annule jusqu'au premier point de sauvegarde ROLLBACK TO SAVEPOINT my_savepoint; SELECT * FROM table1; -- affiche seulement la ligne 1 COMMIT;
La transaction ci-dessus montre que la ligne 3 est annulée en premier, puis c'est au tour de la ligne 2.
SQL requiert la destruction automatique d'un point de sauvegarde quand un
autre point de sauvegarde du même nom est créé. Avec
PostgreSQL, l'ancien point de sauvegarde est conservé, mais
seul le plus récent est utilisé pour une annulation ou une libération.
(Libérer avec RELEASE SAVEPOINT
le point de sauvegarde
le plus récent fait que l'ancien est de
nouveau accessible aux commandes ROLLBACK TO SAVEPOINT
et
RELEASE SAVEPOINT
.) Sinon, SAVEPOINT
est
totalement conforme à SQL.