Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group