PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Мога ли да помоля Postgresql да игнорира грешки в транзакция

(АКТУАЛИЗИРАНЕ:Няма нужда да го правите на ръка, попитах в пощенските списъци на postgresql и се оказа, че това поведение вече е внедрено от ON_ERROR_ROLLBACK, зададен в psql клиента)

За да уточним отговора на Саймън (+1) , във вашия сценарий можете редовно да добавяте точка за запис след всяка интерактивна заявка, винаги със същото име (записва предишната, ако заявката е успешна). В случай на грешка се връщате към последната запазена и продължавате от там.

Пример за този работен модел:

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. Как работи current_time в PostgreSQL

  2. PostgreSQL IN оператор с слаба производителност на подзаявката

  3. Вземете n групирани категории и сумирайте останалите в една

  4. Поправяне на повредена база данни postgresql

  5. Как да инсталирате PostgreSQL на macOS