Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > PostgreSQL

Respuesta
 
Herramientas Desplegado
Antiguo 06-abr-2008, 01:56   #1 (permalink)
djorj ha deshabilitado el karma
 
Fecha de Ingreso: junio-2007
Mensajes: 1
Problemas con recursividad en triggers

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
djorj está desconectado   Responder Citando
Antiguo 07-abr-2008, 01:28   #2 (permalink)
seyko ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.062
Re: Problemas con recursividad en triggers

uffff dale un repaso a como funcionan los triggers.

Crea un trigger BEFORE que poble las fechas de auditoria (creacion y modificacion). Pero no hagas un UPDATE dentro del trigger!!!! Repito dale un repaso a http://www.postgresql.org/docs/
Este trigger rellena la fecha de creacion o modificación segun sea un INSERT o un UPDATE, pero no tienes que hacer el INSERT ni el UPDATE dentro del trigger.

Luego creas otro trigger AFTER que "copia" en Recetas_historial.

Salu2
seyko está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 20:46.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93