Re: Constarint triggers

From: Oswaldo Hernández <listas(at)soft-com(dot)es>
To: Edwin Quijada <listas_quijada(at)hotmail(dot)com>
Cc: jcasanov(at)systemguards(dot)com(dot)ec, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Constarint triggers
Date: 2010-01-21 09:00:22
Message-ID: 4B5817A6.9060500@soft-com.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Edwin Quijada escribió:
...
> A ver si entiendo , tienes un trigger que se dispara luego de haber
> hecho el commit del record. ??
> Este tipo de trigger son los deferred??
>

Si, estos triggers si los declaras como 'deferrable initially deferred'
se disparan al realizar el commit, no cuando ejecutas la instrucción.
Los descubrí hace un par de dias y creo que pueden ser muy útiles en
determinadas situaciones.

En mi caso necesitaba que el trigger evalúara el conjunto se acciones
realizadas durante la transacción en vez de hacerlo de forma individual.
Un ejemplo:

Una tabla 'distribucion_grupo' con los campos:
id_elemento
id_grupo
porcentaje_distribucion
etc ...

La condición de esta tabla es que la suma de los campos
'porcentaje_distribucion' para cada 'id_grupo' debe ser = 100, otro
valor debe generar una excepción.

Supongamos que quieres asignar a un grupo 3 registros con porcentajes de
25, 25 y 50. Un trigger o un check normal no vale, porque se ejecutaría
en cuanto realizaras el primer insert y saltaría la excepción ya que la
suma todavía no es = 100. Sin embargo el trigger deferrable espera a que
finalice la transacción para ejecutarse, y en ese momento ya tienes
realizados los tres inserts por lo que la suma ya se puede evaluar
correctamente.

Inconvenientes:

. El trigger se dispara por cada operación (tres veces en este caso).
Dependiendo del coste de ejecución, o si se realizan acciones sobre
otras tablas hay que tener esto en cuenta.
Bueno, no se si realmente esto es inconveniente o ventaja, depende de la
situación.

. PgAdminIII los ignora completamente. No tiene asistente para
crearlos/editarlos y tampoco los muestra en el árbol de objetos. Hay que
tener cuidado con esto porque es fácil que se te olvide que están ahí.
EMS version Lite también los ignora, sin embargo con 'psql \d tabla' si
aparecen.

> Eso me podria ayudar en un lio que tengo .....>-()
>

No se si esto te podrá ayudar en tu 'lio', a mi me ha solucionado un
problema que arrastraba desde hace algún tiempo ;) .

Saludos,

--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Diego Schulz 2010-01-21 13:36:56 Re: Postgresql y Windows 7
Previous Message Edwin Quijada 2010-01-20 22:31:32 RE: pgsql-es-ayuda automatizar tareas en postgres