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)
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 |