PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy mogę poprosić Postgresql o ignorowanie błędów w transakcji?

(AKTUALIZACJA:Nie trzeba robić tego ręcznie, zapytałem na listach dyskusyjnych postgresql i okazało się, że to zachowanie jest już zaimplementowane przez ON_ERROR_ROLLBACK ustawioną w kliencie psql)

Aby rozwinąć odpowiedź Simona (+1) , w swoim scenariuszu możesz rutynowo dodać punkt zapisu po każdym interaktywnym zapytaniu, zawsze o tej samej nazwie (zastępuje poprzednią, jeśli zapytanie się powiedzie). W przypadku błędu wracasz do ostatniego zapisanego i kontynuujesz stamtąd.

Przykład tego wzorca pracy:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wartość jest za długa, aby zmienić znak typu (N)

  2. Przegląd programowania po stronie serwera w PostgreSQL

  3. Najlepsze praktyki w zakresie replikacji PostgreSQL — część 2

  4. Dynamiczne zapytanie przestawne przy użyciu PostgreSQL 9.3

  5. PostgreSQL - Zmień nazwę bazy danych