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

Re: Mejores Practicas con Triggers

From: Jaime Casanova <systemguards(at)gmail(dot)com>
To: Miguel <mmiranda(at)123(dot)com(dot)sv>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Mejores Practicas con Triggers
Date: 2005-12-27 16:15:29
Message-ID: c2d9e70e0512270815wa729d71nfc522f04122322ed@mail.gmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
On 12/27/05, Miguel <mmiranda(at)123(dot)com(dot)sv> wrote:
> Saludos, actualmente tengo un trigger en una tabla que ejecuta una serie
> de calculos utilizando datos que recoge de otras varias tablas y
> actualiza algunas columnas del registro NEW (NEW.descuento :=
> NEW.duracion * llamadas_temp.tarifa, por ejemplo) antes de mandar a
> insertar el nuevo registro, por eso es un triggers before insert, hasta
> aqui todo bien, ahora necesito llevar una tabla de valores consolidados
> pero me interesa no afectar el tiempo de respuesta del insert ya que es
> una aplicacion critica que guarda registro de accounting radius y el
> access server reenvia los paquetes si no obtiene respuesta del servidor
> en 5 segundos, con el resultado de registros duplicados,  cual es la
> practica recomendada en estos casos?, se agregan las sentencias insert
> dentro del trigger actual before insert o mejor creo un nuevo trigger
> after insert de acuerdo al ejemplo
>
> (Trigger Procedure For Maintaining A Summary Table)
> http://www.postgresql.org/docs/8.1/interactive/plpgsql-trigger.html
>
> Segun entiendo en un trigger after insert el registro siempre es
> insertado primero y luego se ejecuta la funcion del trigger, por lo que
> el resultado de este ultimo trigger no afecta en nada la transaccion,
> favor corregime si estoy equivocado,
> Saludos
> ---
> miguel
>
>

Aun cuando es cierto que primero se va insertar el registro... aun no
va a ser visble hasta que la transaccion termine y eso solo ocurrira
despues de la ejecucion del trigger AFTER INSERT...

considera a los triggers como parte de la ejecucion del insert... aun
el trigger after insert puede causar un error que implica deshacer
todo incluida la insercion del registro... en el mejor de los casos
simplemente el tiempo de respuesta de tu insert va a aumentar por la
ejecucion de los triggers...

en el caso especifico tuyo en el que no quieres afectar al tiempo de
respuesta y si puedes vivir con una ligera desincronizacion
(posiblemente ni siquiera la notes) usa LISTEN/NOTIFY para mantener tu
tabla de sumarizados...

--
Atentamente,
Jaime Casanova
(DBA: DataBase Aniquilator ;)

In response to

Responses

pgsql-es-ayuda by date

Next:From: Mario Soto Cordones - VenezuelaDate: 2005-12-27 16:18:03
Subject: Re: Mejores Practicas con Triggers
Previous:From: MiguelDate: 2005-12-27 15:58:03
Subject: Mejores Practicas con Triggers

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