Il est possible de continuer si l'échec était à l'intérieur d'un SAVEPOINT . Voici un exemple en psql :
# create temporary table foo (i int primary key);
CREATE TABLE
Commencez une transaction et insérez une ligne :
# begin;
BEGIN
# insert into foo values(1);
INSERT 0 1
Démarrez un point de sauvegarde, puis insérez la même ligne deux fois. Cela provoquera une erreur :
# savepoint bar;
SAVEPOINT
# insert into foo values(2);
INSERT 0 1
# insert into foo values(2);
ERROR: duplicate key value violates unique constraint "foo_pkey"
Revenez au point de sauvegarde, puis insérez une autre ligne.
# rollback to savepoint bar;
ROLLBACK
# insert into foo values(3);
INSERT 0 1
Validez et voyez ce qu'il y a :
# commit;
COMMIT
# select * from foo;
i
---
1
3
(2 rows)