Re: problema con trigger

From: Guillermo Villanueva <guillermovil(at)gmail(dot)com>
To: Carlos Joaniquet <cjtambur(at)yahoo(dot)es>
Cc: Virginia <mavir78(at)gmail(dot)com>, Jaime Casanova <jaime(at)2ndquadrant(dot)com>, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: problema con trigger
Date: 2010-10-28 12:34:37
Message-ID: AANLkTi=P63YueGf5i5AHCbW5dE2qnuDDHta5PAGY=vHy@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hay varias razones Carlos, opino que la principal es que forzás
una dependencia entre atributos que no son PK , no cumple las formas
normales, esto conlleva a posibles errores de consistencia ante
modificaciones, también está el problema de espacio ocupado e innecesario,
redundancia digamos.
En todo caso, lo recomendable es: si hay redundancia, que sea "redundancia
controlada" por ejemplo a través de triggers.

Saludos

~~~~~~~~~~~~~~~~
Guillermo Villanueva

El 28 de octubre de 2010 04:23, Carlos Joaniquet <cjtambur(at)yahoo(dot)es>escribió:

> Por qué razón no se deben utilizar los campos calculados?
> Es que en alguna de mis tablas existen varios :) que me recalculan gastos,
> base imponible, iva, etc de un registro factura cada vez que introduzco un
> apunte contable que hace referencia a esa factura.
> ¿Es un mal diseño?
>
> Gracias
>
> Carlos Joaniquet Tamburini
>
> El 26/10/2010, a las 14:52, Virginia <mavir78(at)gmail(dot)com> escribió:
>
>
>
> El 25 de octubre de 2010 23:09, Jaime Casanova < <jaime(at)2ndquadrant(dot)com>
> jaime(at)2ndquadrant(dot)com> escribió:
>
>> 2010/10/25 Virginia < <mavir78(at)gmail(dot)com>mavir78(at)gmail(dot)com>:
>> > Buenas noches, cómo están? quisiera saber si pueden ayudarme con una
>> duda.
>> > Tengo una tabla con los campos id, campo1, campo2, campo3, total y un
>> > trigger q lo que debería hacer es que cada vez q inserto un registro en
>> esa
>> > tabla me sume el campo1 + campo2 + campo3 y actualice ese resultado en
>> el
>> > campo total.
>> > Ahora bien, hice el trigger q se dispara desde la misma tabla me crea un
>> > lazo infinito, cóm puedo resolver esto? o no debo hacer un n trigger q
>> se
>> > dispare cuando hay un evento en la tabla X para realizar una acción en
>> la
>> > misma tabla X?
>> >
>>
>> apoyo la idea de la vista (los campos calculados no deberian existir a
>> menos que haya una buena razon).
>>
>> sobre tu problema, no ejecutes otro insert ni un update, por eso se
>> dispara el trigger deberias tener un codigo algo asi:
>>
>> create function fn_trg_calcula() returns trigger as $$
>> begin
>> new.total = new.campo1+new.campo2+new.campo3;
>> end;
>> $$ language plpgsql;
>>
>> --
>> Jaime Casanova <http://www.2ndQuadrant.com>www.2ndQuadrant.com
>> Professional PostgreSQL: Soporte y capacitación de PostgreSQL
>>
>
>
>
>
> Les comento, el código del trigger es el siguiente:
>
> CREATE OR REPLACE FUNCTION calcular_total() RETURNS trigger AS '
> BEGIN
> IF (tg_op = ''INSERT'') OR (tg_op = ''UPDATE'') THEN
> UPDATE promedios SET total= NEW.campo1 + NEW.campo2 + NEW.campo3 WHERE
> id = codigo;
> END IF;
> RETURN NEW;
> END
> ' LANGUAGE plpgsql;
>
>
> CREATE TRIGGER calcular_total AFTER INSERT OR UPDATE ON promedios
> EXECUTE PROCEDURE calcular_total();
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2010-10-28 13:46:45 Re: Slony: fatal error
Previous Message Oswaldo Hernández 2010-10-28 11:57:02 Re: Sentencia DML dinamica.