utiliza el disparador en modo for each row before update, para que te ejecute 
la sentencia antes que actualices el registro, entonces con OLD obtienes el 
atributo de la tabla antes de modificar y con NEW el nuevo valor.

Aqui te pongo un ejemplo para que puedas realizar lo que necesitas:

CREATE TABLE "public"."nuevo" (
  "id" SERIAL, 
  "nombre" VARCHAR(20), 
  CONSTRAINT "nuevo_pkey" PRIMARY KEY("id")
) WITH OIDS;

CREATE TABLE "public"."historico" (
  "id" SERIAL, 
  "nombre_viejo" VARCHAR(20), 
  "nombre_nuevo" VARCHAR, 
  CONSTRAINT "historico_pkey" PRIMARY KEY("id")
) WITH OIDS;

CREATE OR REPLACE FUNCTION "public"."funAntesUpdate" (
)
RETURNS trigger AS
$body$
DECLARE
BEGIN
  INSERT INTO historico(nombre_viejo, nombre_nuevo) 
  VALUES(OLD.nombre, NEW.nombre);
  RETURN NEW;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;

CREATE TRIGGER "trigger1" BEFORE UPDATE 
ON "public"."nuevo" FOR EACH ROW 
EXECUTE PROCEDURE "public"."funAntesUpdate"();

Para mas información puedes consultar la siguiente direccion:

http://www.postgresql.org.es/node/301

Saludos.

________________________________________
De: pgsql-es-ayuda-ow...@postgresql.org [pgsql-es-ayuda-ow...@postgresql.org] 
En nombre de Gaston Rider [gastonri...@hotmail.com]
Enviado el: jueves, 02 de junio de 2011 9:12
Para: Postgres Lista
Asunto: [pgsql-es-ayuda] Trigger ayuda con funcion

Hola. Necesitarìa ayuda con una funcion... disparador en update.

necesito guardar en una tabla xxxx los campos que fueron modificados en la 
tabla que disaparò el trigger..

en principio necesitaria la manera de recorrer "los campos" de la tabla en 
cuestion, compararlos con
los valores nuevos, y en el caso de que el valor se modificó... guardar esto...

no sè si se entiende???


muchas gracias


-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a