Documentation PostgreSQL 14.22 » Référence » Commandes SQL » ROLLBACK TO SAVEPOINT

Précédent | Niveau supérieur | Suivant
ROLLBACK PREPARED | Sommaire | SAVEPOINT

## ROLLBACK TO SAVEPOINT

ROLLBACK TO SAVEPOINT — annule les instructions jusqu'au point de sauvegarde

## Synopsis

    ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] nom_pointsauvegarde

## Description

Annule toutes les commandes qui ont été exécutées après l'établissement du point de sauvegarde. Le point de sauvegarde reste valide. Il est possible d'y d'y revenir encore si cela s'avérait nécessaire.

`ROLLBACK TO SAVEPOINT` détruit implicitement tous les points de sauvegarde établis après le point de sauvegarde indiqué.

## Paramètres

`nom_pointsauvegarde`

  Le point de sauvegarde où retourner.

## Notes

`RELEASE SAVEPOINT` est utilisé pour détruire un point de sauvegarde sans annuler les effets de commandes exécutées après son établissement.

Spécifier un nom de point de sauvegarde inexistant est une erreur.

Les curseurs ont un comportement quelque peu non transactionnel en ce qui concerne les points de sauvegarde. Tout curseur ouvert à l'intérieur d'un point de sauvegarde est fermé lorsque le point de sauvegarde est rejoint. Si un curseur précédemment ouvert est affecté par une commande `FETCH` ou `MOVE` à l'intérieur d'un point de sauvegarde rejoint par la suite, la position du curseur reste celle obtenue par `FETCH` (c'est-à-dire que le déplacement du curseur dû au `FETCH` n'est pas annulé). La fermeture d'un curseur n'est pas non plus remise en cause par une annulation. Néanmoins, certains effets de bord causés par la requête du curseur (comme les effets de bord des fonctions volatiles appelées par la requête) sont annulés s'ils surviennent lors d'un point de sauvegarde qui est annulé plus tard. Un curseur dont l'exécution provoque l'annulation d'une transaction est placé dans un état non exécutable. De ce fait, alors même que la transaction peut être restaurée par `ROLLBACK TO SAVEPOINT`, le curseur ne peut plus être utilisé.

## Exemples

Pour annuler les effets des commandes exécutées après l'établissement de `mon_pointsauvegarde` :

    ROLLBACK TO SAVEPOINT mon_pointsauvegarde;

La position d'un curseur n'est pas affectée par l'annulation des points de sauvegarde :

    BEGIN;

    DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;

    SAVEPOINT foo;

    FETCH 1 FROM foo;
     ?column?
    ----------
            1

    ROLLBACK TO SAVEPOINT foo;

    FETCH 1 FROM foo;
     ?column?
    ----------
            2

    COMMIT;

## Compatibilité

Le standard SQL spécifie que le mot clé `SAVEPOINT` est obligatoire mais PostgreSQL et Oracle autorisent son omission. SQL n'autorise que `WORK`, pas `TRANSACTION`, après `ROLLBACK`. De plus, SQL dispose d'une clause optionnelle `AND [ NO ] CHAIN` qui n'est actuellement pas supportée par PostgreSQL. Pour le reste, cette commande est conforme au standard SQL.

## Voir aussi

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, SAVEPOINT