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.
--
TIP 8: explain analyze es tu amigo

Responder a