From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | Jose Maria Mencia Fernandez <jmencia(at)alimarket(dot)es> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Error 25P02: transacción abortada ... |
Date: | 2007-06-22 14:19:21 |
Message-ID: | 20070622141921.GD8949@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Jose Maria Mencia Fernandez escribió:
> Buenas a todos, lista,
> les pediría que me dieran alguna luz, si es posible, acerca de un error
> 25P02 obtenido con la siguiente situación ...
> Ejecuto un programa Java conectando a postgresql con driver JDBC.
> Con este driver no consigo habilitar/deshabilitar el Autocommit (pero
> ese es otro tema) y ejecuto la siguiente secuencia;
>
> Recorro un bucle dentro del cual hago:
> 1.- BEGIN;
> 2.- INSERT INTO tabla1 .... (puede obtener un error 23505-UNIQUE
> VIOLATION que capturo con el catch de Java y no hago nada. Es decir, si
> el registro está, pues adelante).
Esta premisa es erronea. Si una sentencia falla, la transaccion queda
en modo abortado y no puedes seguir ejecutando ordenes (de hecho, en ese
estado tampoco puedes hacer COMMIT).
Puedes modificar tu codigo asi:
BEGIN
SAVEPOINT primer_insert
INSERT INTO tabla1 ...
-> si obtiene error, ROLLBACK TO primer_insert
-> si funciona OK, RELEASE SAVEPOINT primer_insert
SAVEPOINT segundo_insert
INSERT INTO tabla_de_log
-> si obtiene error, ROLLBACK TO segundo_insert
COMMIT
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2007-06-22 14:23:13 | Re: Funcion en PostgreSQL |
Previous Message | Alvaro Herrera | 2007-06-22 14:15:07 | Re: Postgres and Mapserver timeout |