mira para eso estan las instruciones NEW y OLD. te voy a poner un ejemplo a ver si te sirve :)
este es el trigger
Código SQL:
Ver originalCREATE TRIGGER vf_trigger_cuenta_estado BEFORE UPDATE
ON public.vf_verificacion_venta FOR EACH ROW
EXECUTE PROCEDURE public.vf_audit_cuenta_estado();
y este es el procedimiento que se ejecuta cada vez que hace un UPDATE:
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION public.vf_audit_cuenta_estado (
)
RETURNS TRIGGER AS
$body$
BEGIN
IF (TG_OP = 'UPDATE') THEN
IF(COALESCE(OLD.id_estado,0) <> NEW.id_estado OR COALESCE(OLD.observacion,'') <> NEW.observacion OR COALESCE(OLD.id_solucion,0) <> NEW.id_solucion) THEN
INSERT INTO vf_audit_cuenta_estado (audit_nrocuenta,audit_estado,audit_observacion,audit_solucion,audit_fecha,audit_usersys)
SELECT NEW.nrocuenta,NEW.id_estado,NEW.observacion,NEW.id_solucion,now(),NEW.usersys ;
RETURN NEW;
ELSEIF (TG_OP = 'DELETE') THEN
RETURN NULL;
END IF;
END IF;
RETURN NEW;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
lo que hace este procedimiento es al realizar una actualización sobre los 3 campos del primer IF, este va guardar ese cambio en otra tabla.
es decir las instrucciones NEW y OLD te permiten manipular lo que acabas de introducir(NEW) y lo que tenias antes de que hicieras el cambio con (OLD).
ELSE sirve para evitar que se eliminen registros de la tabla.
y el return NEW fuera de los if es para cuando se realiza una modificación en un campo diferente a los mencionados.
Espero que te sirva.......