From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Carlos Eduardo <ceal(dot)educar(at)gmail(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Dudas con respecto a functions |
Date: | 2005-08-11 14:31:45 |
Message-ID: | 20050811143145.GA19103@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Thu, Aug 11, 2005 at 09:47:41AM -0400, Carlos Eduardo wrote:
> Estoy empezando una Aplicación en la que el trabajo con la base de
> datos es un tanto delicado. Mi experiencia real en programación con
> Base de Datos es con PL/SQL en DB2. Y en los procedimientos
> almacenados yo podia manejar transacciones. Ahora mi inquietud es con
> respecto a las funciones de PL/pgSQL, tambien pueden manejar
> transacciones???
Todo en Postgres sucede dentro de una transaccion, ya sea explicitamente
(porque le das BEGIN/COMMIT) o bien implicitamente (ejecutar un comando
"aislado" abre una transaccion, ejecuta y luego la cierra). Una funcion
se ejecuta dentro de exactamente una transaccion -- no puedes
comprometerla en la mitad y continuar la mitad con otra, asi como
tampoco puedes ejecutar una funcion fuera de una transaccion. La misma
API para funciones (SPI) prohibe el uso de BEGIN, COMMIT y demas
llamadas SQL de control de transacciones.
En PL/pgSQL puedes usar EXCEPTIONS, lo cual automaticamente crea
SAVEPOINTs aplicables al bloque BEGIN/END donde se definen. Eso te da
control sobre cada parte de la funcion, pudiendo hacer rollback de un
bloque en particular y continuar con el resto de la ejecucion de la
funcion.
--
Alvaro Herrera (<alvherre[a]alvh.no-ip.org>)
"La naturaleza, tan frágil, tan expuesta a la muerte... y tan viva"
From | Date | Subject | |
---|---|---|---|
Next Message | Jairo Sánchez | 2005-08-11 15:09:05 | Re: No arranca el servidor de Postgre |
Previous Message | Edwin Quijada | 2005-08-11 14:30:52 | RE: Dudas con respecto a functions |