sql >> Database >  >> RDS >> PostgreSQL

Kan ik Postgresql vragen fouten binnen een transactie te negeren?

(UPDATE:het is niet nodig om dit met de hand te doen, ik vroeg het in de postgresql-mailinglijsten, en het bleek dat dit gedrag al is geïmplementeerd door de ON_ERROR_ROLLBACK die is ingesteld in de psql-client)

Om Simon's antwoord (+1) nader uit te werken, zou je in jouw scenario standaard een savepoint kunnen toevoegen na elke interactieve query, altijd met dezelfde naam (het overschrijft de vorige als de query succesvol is). In het geval van een fout, gaat u terug naar de laatst opgeslagen fout en gaat u vanaf daar verder.

Een voorbeeld van dit werkpatroon:

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)


  1. Oracle-certificeringen

  2. Wijzigen hoe isql SQL uitvoert

  3. Ontdek bij welk kwartaal een datum hoort in Oracle

  4. MySQL mislukt op:mysql ERROR 1524 (HY000):Plugin 'auth_socket' is niet geladen