PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Posso pedir ao Postgresql para ignorar erros em uma transação


(ATUALIZAÇÃO:Não há necessidade de fazer isso manualmente, perguntei nas listas de discussão postgresql, e aconteceu que esse comportamento já está implementado, pelo ON_ERROR_ROLLBACK definido no cliente psql)

Para elaborar a resposta de Simon (+1) , em seu cenário, você poderia adicionar um ponto de salvamento após cada consulta interativa, sempre com o mesmo nome (substitui o anterior se a consulta for bem-sucedida). Em caso de erro, você volta para o último salvo e continua a partir daí.

Um exemplo deste padrão de trabalho:
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)