Re: Fwd: Error al ejecutar una funcion con commit

From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Fwd: Error al ejecutar una funcion con commit
Date: 2007-07-03 00:46:19
Message-ID: 484438.62761.qm@web63705.mail.re1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


--- Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>
escribió:

> 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)
> --
> ---------------------------(fin del
> mensaje)---------------------------
> TIP 9: visita nuestro canal de IRC #postgresql-es en
> irc.freenode.net
>
Sirve bastante
Atte.
Gabriel Hermes Colina Zambra

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ernesto Quiñones 2007-07-03 01:02:50 postgresql sobre aix
Previous Message Miguel Rodríguez Penabad 2007-07-03 00:05:38 Fwd: Error al ejecutar una funcion con commit