Fwd: Error al ejecutar una funcion con commit

From: Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Fwd: Error al ejecutar una funcion con commit
Date: 2007-07-03 00:05:38
Message-ID: 95335e4e0707021705y74f12ddrd2343377671fe3b3@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Lo reenvío a la lista porque usé "responder" en vez de "responder a todos".
Yo también soy de los que cree (quizá acostumbrado de otras listas)
que el comportamiento por defecto debería ser reply-to a la lista :D

---------- Forwarded message ----------
From: Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>
Date: 03-jul-2007 2:03
Subject: Re: [pgsql-es-ayuda] Error al ejecutar una funcion con commit
To: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>

El 3/07/07, Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com> escribió:
> Efectivamente, puesto que en si la funcion se ejecuta
> dentro de una transaccion, no solo no se puede hacer
> commit, si no que lo principal es que esto es
> automatico, o sea en castellano quiere decir que si
> todo va bien la funcion se ejecuta en su totalidad y
> si no no se ejecuta nada.
>

Por si sirve de ayuda:

Se pueden "crear" savepoints usando bloques begin .. exception .. end

Por ejemplo:
create table a(campo int primary key);

create or replace function f1(int) returns void language plpgsql
as $$
begin
--bloque 1
begin
insert into a values($1);
exception
when others then null;
end;
--bloque 2
begin
insert into a values($1);
exception
when others then null;
end;
end $$;

Como se ve, se intenta insertar el parámetro de la función 2 veces, lo
que provoca una violación de la clave primaria.
El "bloque 1 funciona" y el "bloque 2" falla, haciendo un rollback
parcial al savepoint que
ha creado, con lo que la primera inserción sí funciona, y la segunda no.

postgres=# select * from a;
a
---
(0 rows)

postgres=# select f1(32);
f1
----

(1 row)

postgres=# select * from a;
a
----
32
(1 row)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Hermes Colina Zambra 2007-07-03 00:46:19 Re: Fwd: Error al ejecutar una funcion con commit
Previous Message Gabriel Hermes Colina Zambra 2007-07-02 22:35:35 Re: Error al ejecutar una funcion con commit