| 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: | Whole Thread | Raw Message | 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 |