PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Puis-je demander à Postgresql d'ignorer les erreurs dans une transaction

(MISE À JOUR :Pas besoin de le faire à la main, j'ai demandé dans les listes de diffusion postgresql, et il s'est avéré que ce comportement est déjà implémenté, par le ON_ERROR_ROLLBACK défini dans le client psql)

Pour développer la réponse de Simon (+1) , dans votre scénario, vous pouvez rutinièrement ajouter un point de sauvegarde après chaque requête interactive, toujours avec le même nom (il écrase le précédent si la requête est réussie). En cas d'erreur, vous revenez au dernier enregistré et continuez à partir de là.

Un exemple de ce modèle de travail :

db=# select * from test_gral ;
 i |  t   |  n
---+------+------
 1 | text | 10.0
(1 row)

db=# begin;
BEGIN
db=#  insert into test_gral values (2,'xx',20); savepoint sp;
INSERT 0 1
SAVEPOINT
db=#  insert into test_gral values (3,'xx',30); savepoint sp;
INSERT 0 1
SAVEPOINT
db=#  insert into test_gralxx values (4,'xx',40); savepoint sp;
ERROR:  relation "test_gralxx" does not exist
LINE 1: insert into test_gralxx values (4,'xx',40);
                    ^
ERROR:  current transaction is aborted, commands ignored until end of transaction block
db=# ROLLBACK TO SAVEPOINT sp;
ROLLBACK
db=#  insert into test_gral values (4,'xx',40); savepoint sp;
INSERT 0 1
SAVEPOINT
db=# commit;
COMMIT
db=# select * from test_gral ;
 i |  t   |  n
---+------+------
 1 | text | 10.0
 2 | xx   |   20
 3 | xx   |   30
 4 | xx   |   40
(4 rows)