From: | "Jorge Herrera Roures" <jherreraroures(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org(dot) |
Subject: | Problemas con recursividad en triggers |
Date: | 2008-04-05 09:28:31 |
Message-ID: | e205a460804050228l48164051wd66039d4f27499dc@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola amigos, tengo un problema y no se como resolverlo. Os cuento.
Tengo una tabla "Recetas", la cual, cada vez que se efectúe un cambio
(insert o update) quiero guardar una copia en otra tabla de históricos,
"Recetas_hist" con el mismo registro.
En la tabla Recetas tengo dos campos timestamp, Timestamp_alta,
Timestamp_mod.
Cuando se realiza un insert, Timestamp_alta se informa automáticamente y
Timestamp_mod contiene nulos, puesto que así sabemos que aún no se ha
modificado.
El problema viene cuando actualizamos el registro. Ya que Timestamp_mod
tiene que contener la fecha en la que se actualiza el registro y quiero que
se haga automáticamente, sin pasársela yo en el update.
He creado un trigger para que cuando se actualice Recetas inserte en
Recetas_hist, pero antes tiene que informar el Timestamp_mod en Recetas para
que aparezca en las dos tablas con el mismo valor, lo que ocurre es que al
hacer el update sobre Recetas dentro del trigger se vuelve recursivo.
Os adjunto el trigger.
CREATE OR REPLACE FUNCTION funActualizaRecHist() RETURNS TRIGGER AS '
BEGIN
UPDATE recetas
SET timestamp_mod = CURRENT_TIMESTAMP
WHERE cod_rec = NEW.cod_rec;
INSERT INTO recetas_hist(cod_rec,ingredientes, dificultad,
tiempo,preparacion, iduser,
timestamp_alta, timestamp_mod)
VALUES (NEW.cod_rec, NEW.ingredientes, NEW.dificultad, NEW.tiempo,
NEW.preparacion,
NEW.iduser, NEW.timestamp_alta, NEW.timestamp_mod);
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
CREATE TRIGGER trgActualizaRecHist
AFTER UPDATE ON recetas
FOR EACH ROW
EXECUTE PROCEDURE funActualizaRecHist();
Podría informar de alguna manera el campo Timestamp_mod de Recetas dentro
del trigger sin que se volviese a disparar el trigger?
O tendría que crear otro trigger solo para actualizar el campo Timestamp_mod
de Recetas, pero, como le digo que se ejecute ANTES que este trigger?
Como podría hacerlo?.
Gracias
From | Date | Subject | |
---|---|---|---|
Next Message | JGuillaume (ioguix) de Rorthais | 2008-04-05 10:35:04 | Re: RV: instalacion del PHPPGADMIN |
Previous Message | Jaime Casanova | 2008-04-05 03:37:40 | Re: mejorar el rendimiento postgres 8.2.* en windows |