Re: Error 25P02: transacción abortada ...

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.

In response to

Browse pgsql-es-ayuda by date

  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