Re: Consulta sobre funcion

From: Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta sobre funcion
Date: 2006-06-20 18:35:17
Message-ID: 20060620183517.GG4187@mail.interservice.net
Views: Raw Message | Whole Thread | Download mbox
Thread:
Lists: pgsql-es-ayuda

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.

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

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

--
Rodrigo Gallardo
GPG-Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Oswaldo Hernández 2006-06-20 18:51:14 Re: PANIC: ERRORDATA_STACK_SIZE exceeded
Previous Message Alvaro Herrera 2006-06-20 18:19:04 Re: PANIC: ERRORDATA_STACK_SIZE exceeded