From: | "Daniel Carrero" <dxduke(at)gmail(dot)com> |
---|---|
To: | "Luis Rodrigo Gallardo Cruz" <rodrigo(at)nul-unu(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Consulta sobre funcion |
Date: | 2006-06-20 18:57:08 |
Message-ID: | 270a87700606201157w17d63de3n513a7d666a9e4309@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On 20/06/06, Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com> wrote:
> On Tue, Jun 20, 2006 at 02:18:50PM -0400, Daniel Carrero wrote:
> > On 20/06/06, Alvaro Herrera <alvherre(at)commandprompt(dot)com> wrote:
> > >Que tal si planteas eso de manera que realmente parezca una pregunta que
> > >alguien pueda entender?
> > >
> >
> > Ok, lo siento, la cosa es la siguiente.
> > en el manual de postgresql 8.1 cuando habla de trigger procedures lo
> > que hace es crear una funcion cierto? y luego desde el trigger se
> > llama a la funcion con el comando EXECUTE PROCEDURE nombre_funcion();
> > http://www.postgresql.org/docs/8.1/interactive/plpgsql-trigger.html
> >
> > si mi ingles no me falla eso es tomado como un procedimiento que se
> > ejecuta antes o despues de una accion, es lo que hace un trigger.
>
> Hasta aquí, bien. Sólo, olvidate de la distinción
> función/procedimiento. En postgres son lo mismo.
Hummm.... ?
>
> > Por eso pregunto
> > - dentro de la funcion se tienen INSERT UPDATE o DELETE, ¿¿¿como es
> > que en una funcion no puede ir entonces ROLLBACK o COMMIT ???
>
> Porque son cosas diferentes. Una cosa es lo que ejecutas *dentro* de
> una transacción, y otra lo que usas para *controlar* la transacción.
>
> > -¿¿ Como me aseguro que el procedimiento haya sido cancelado y vuelva
> > a su estado anterior la base de datos???
>
> Me imagino que te refieres al caso en que la función detecta un error,
> ¿cierto? Fácil: Sí el error lo detectó la misma base de datos (por que
> violaste alguna regla de integridad referencial, por ejemplo), la
> misma base de datos aborta la transacción.
>Si el error lo detecta tu
> función (digamos que ejecutas una validación de datos y ésta falla),
> tu función lanza una excepción y la base de datos, al recibir eso,
> aborta la transacción.
Un trigger verdad??
>
> > En cuanto a las transacciones:
> > En un manual de php con postgresql hacen una transaccion directa, es decir:
> >
> > $sql="BEGIN TRANSACTION ...........";
> > Donde sí existen COMMIT o ROLLBACK
> > ...
> > Se que esto no es recomendable
>
> ¿Por que?
> Creo que no estas entendiendo *qué* es una transacción.
http://es.wikipedia.org/wiki/Transacci%C3%B3n
aqui la definicion es clara, entonces una transaccion puede tener
varios bloques definidos por un BEGIN y END, dentro de esta puedo usar
COMMIT o ROLLBACK, la pregunta que ahora me sale es si dentro de una
funcion puedo hacer una transaccion ???
>
> --
> Rodrigo Gallardo
> GPG-Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28
>
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.3 (GNU/Linux)
>
> iD8DBQFEmD/lAZmDGK3JvCgRAvlzAJ402/ewA+DIgjwPb44d1wfIcnYHawCfXPSG
> Oy+OVK4+Qc3/WVZry2VGaEw=
> =bD0G
> -----END PGP SIGNATURE-----
>
>
>
--
Atte.
Daniel Carrero
Analista Programador
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2006-06-20 19:01:10 | Re: PANIC: ERRORDATA_STACK_SIZE exceeded |
Previous Message | Xavier Puig | 2006-06-20 18:51:58 | [Fwd: Re: búsqueda con tolerancia] |