Hola a todos 
Estoy trabajando intentando actualizar los valores de dos tablas (a_fer con un update , a_fer 2 con insert ) con los valores updateados de una tercera tabla (a _lote) con el siguiente funcionamiento
1)	Realizo un update de un registro del campo estado de  a_lote 
2)	Actualizar los valores del campo estado=33 de la tabla a_fer .
Mi trigger actual actualiza todos los valores del campo estado de la tabla a_fer con  los valores de la tabla  a_lote y yo solo quiero que actualice los valores que han cambiado en a_lote. 
 
 ¿Cómo puedo establecer una restricción para que solo actualice los valores que han sido updateados en a_lote?
-- Function: update()
-- DROP FUNCTION update();
CREATE OR REPLACE FUNCTION update()
  RETURNS trigger AS
$BODY$BEGIN
UPDATE a_fer SET estado=a_lote.estado FROM a_lote WHERE a_fer.id_ofi_loc=a_lote.id_ofi_loc;
RETURN NEW;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION update()
  OWNER TO postgres;
 
-- Trigger: tr_lote_update on a_lote
-- DROP TRIGGER tr_lote_update ON a_lote;
 
CREATE TRIGGER tr_lote_update
  AFTER UPDATE OF estado
  ON a_lote
  FOR EACH ROW
  WHEN ((new.estado = 33))
  EXECUTE PROCEDURE update();
 
3)	Insertar los valores que han sido updateados en la tabla a_fer en la tabla a_fer2?
 
Mi trigger actual inserta a todos los valores de la tabla a_fer en la tabla  a_fer2  
 ¿Cómo puedo conseguir que solo inserte los valores que han updateados  en a_fer?. -- Function: borrar()
 
-- DROP FUNCTION borrar();
 
CREATE OR REPLACE FUNCTION borrar()
  RETURNS trigger AS
$BODY$BEGIN
INSERT INTO a_fer2(a1, a2,id_ofi_loc,estado)
select a1::int,a2::int,id_ofi_loc,estado from a_fer;
RETURN NEW;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION borrar()
  OWNER TO postgres;
 
 
-- Trigger: tr_lote on a_lote
 
-- DROP TRIGGER tr_lote ON a_lote;
 
CREATE TRIGGER tr_lote
  AFTER UPDATE OF estado
  ON a_lote
  FOR EACH ROW
  WHEN ((new.estado = 33))
  EXECUTE PROCEDURE borrar();
 
gracias 
  
 

