| 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: | Whole Thread | Raw Message | 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 |