RELEASE SAVEPOINT — relâche un point de sauvegarde précédemment défini
RELEASE [ SAVEPOINT ] nom_pointsauvegarde
RELEASE SAVEPOINT
relâche le point de sauvegarde nommé
et tous les points de sauvegardes actifs créés après le point de sauvegarde
nommé. Il libère leurs ressources. Tous les changements réalisés après la
création du point de sauvegarde qui n'étaient pas déjà annulés sont fusionnés
dans la transaction ou le point de sauvegarde qui était actif quand le
point de sauvegarde nommé a été créé. Les changements réalisés après
RELEASE SAVEPOINT
feront aussi partie de cette transaction
ou point de sauvegarde actif..
RELEASE SAVEPOINT
détruit aussi tous les points de
sauvegarde créés ultérieurement au point de sauvegarde indiqué.
nom_pointsauvegarde
Le nom du point de sauvegarde à relâcher.
Spécifier un nom de point de sauvegarde qui n'a pas été défini est une erreur.
Il n'est pas possible de relâcher un point de sauvegarde lorsque la transaction est dans un état d'annulation ; pour ce faire, utilisez ROLLBACK TO SAVEPOINT.
Si plusieurs points de transaction ont le même nom, seul le plus récemment défini et non libéré est libéré. Des commandes répétées libéreront progressivement les anciens points de transaction.
Pour établir puis relâcher 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 3 et 4.
Un exemple plus complexe avec plusieurs sous-transactions imbriquées :
BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT sp1; INSERT INTO table1 VALUES (2); SAVEPOINT sp2; INSERT INTO table1 VALUES (3); RELEASE SAVEPOINT sp2; INSERT INTO table1 VALUES (4))); -- génère une erreur
Dans cet exemple, l'application demande de relâcher le point de sauvegarde
sp2
, qui a inséré 3. Ceci modifie le contexte de la
transaction de l'insertion en sp1
. Quand l'instruction
qui essaie d'insérer la valeur 4 génère une erreur, l'insertion de 2 et 4
est perdue parce qu'elles sont dans le même point de sauvegarde maintenant
annulé, et la valeur 3 est dans le même contexte de transaction.
L'application peut maintenant uniquement choisir une de ces deux commandes,
car toutes les autres seront ignorées :
ROLLBACK; ROLLBACK TO SAVEPOINT sp1;
Choisir ROLLBACK
annulera tout, ceci incluant la valeur
1 alors que ROLLBACK TO SAVEPOINT sp1
retiendra la valeur
1 et permettra à la transaction de continuer.
Cette commande est conforme au standard SQL. Le standard
impose le mot clé SAVEPOINT
mais
PostgreSQL autorise son omission.