sql >> Base de Datos >  >> RDS >> PostgreSQL

Continuar la transacción de Postgres con excepciones en Java

Es posible continuar si la falla estuvo dentro de un SAVEPOINT . Aquí hay un ejemplo en psql:

# create temporary table foo (i int primary key);
CREATE TABLE

Comience una transacción e inserte una fila:

# begin;
BEGIN
# insert into foo values(1);
INSERT 0 1

Inicie un punto de guardado, luego inserte la misma fila dos veces. Esto causará un error:

# savepoint bar;
SAVEPOINT
# insert into foo values(2);
INSERT 0 1
# insert into foo values(2);
ERROR:  duplicate key value violates unique constraint "foo_pkey"

Regresa al punto de guardado, luego inserta otra fila.

# rollback to savepoint bar;
ROLLBACK
# insert into foo values(3);
INSERT 0 1

Comprométete y mira lo que hay:

# commit;
COMMIT
# select * from foo;
 i 
---
 1
 3
(2 rows)