sql >> Databasteknik >  >> RDS >> PostgreSQL

Kan jag be Postgresql att ignorera fel i en transaktion

(UPPDATERING:Inget behov av att göra detta för hand, jag frågade i postgresqls e-postlistor, och det visade sig att detta beteende redan är implementerat, av ON_ERROR_ROLLBACK inställd i psql-klienten)

För att utveckla Simons svar (+1) , i ditt scenario kan du rutinärt lägga till en räddningspunkt efter varje interaktiv fråga, alltid med samma namn (den skriver över den föregående om frågan är framgångsrik). Vid fel går du tillbaka till den senast sparade och fortsätter därifrån.

Ett exempel på detta arbetsmönster:

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. Finns det en postgres NÄRMASTE operatör?

  2. Dela upp IPv4-adressen i 4 nummer i Oracle sql

  3. Hur man beräknar skillnaden mellan två tidsstämplar i PostgreSQL

  4. Skapa Oracle Sequence Trigger