Re: sobre transacciones...

From: Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>
To: "Br(at)nsh" <bransh(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: sobre transacciones...
Date: 2008-01-14 12:11:36
Message-ID: 95335e4e0801140411v201fd891i3f021f4b9404fd90@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Aunque creo que estás haciendo cosas raras (no por querer borrar la
provincia que quede sin localidades), la respuesta es usar bloques
anidados begin..end (o begin ... exception ... end) en tu función.

Por ejemplo: Tienes una tabla a
CREATE TABLE A (A INT PRIMARY KEY);
y la siguiente función, que intenta insertar un 1 veces.

CREATE OR REPLACE FUNCTION tonta() RETURNS void AS $BODY$
begin
insert into a values(1);
begin
insert into a values(1);
exception
when others then null;
end;
end
$BODY$ LANGUAGE plpgsql;

Evidentemente la segunda inserción produce un error de clave primaria
duplicada, pero al estar en un bloque begin.. exception.. end anidado,
hace el rollback PARCIAL (sólo el bloque interno), con lo que el
primer insert funciona.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gustavo 2008-01-14 12:55:11 Re: Manejo de strings en consulta
Previous Message Oswaldo Hernández 2008-01-14 12:07:58 Re: sobre transacciones...