CREATE TABLE IF NOT EXISTS empleado_audita(
id SERIAL PRIMARY KEY,
campo VARCHAR(7) NOT NULL,
valorantiguo VARCHAR(50) NOT NULL,
valornuevo VARCHAR(50) NOT NULL,
usuario VARCHAR(50) NOT NULL,
fecha TIMESTAMP NOT NULL
);
CREATE OR REPLACE FUNCTION audita_modif_empleados() RETURNS TRIGGER 
AS $$ 
BEGIN 
/* Si los valores NEW y OLD de un campo son distintos es porque estoy actualizando dicho campo */

IF OLD.id <> NEW.id THEN
  INSERT INTO empleado_audita VALUES (DEFAULT,'id',TO_CHAR(OLD.id,'999'),
  TO_CHAR(NEW.id,'999'),current_user,current_timestamp);
END IF;

IF OLD.nombre <> NEW.nombre THEN
  INSERT INTO empleado_audita VALUES (DEFAULT,'nombre',OLD.nombre,
  NEW.nombre,current_user,current_timestamp);
END IF;

IF OLD.email <> NEW.email THEN
  INSERT INTO empleado_audita VALUES (DEFAULT,'email',OLD.email,
  NEW.email,current_user,current_timestamp);
END IF;

IF OLD.fechini <> NEW.fechini THEN
  INSERT INTO empleado_audita VALUES (DEFAULT,'fechini',
  TO_CHAR(OLD.fechini,'DD-MM-YYYY'),
  TO_CHAR(NEW.fechini,'DD-MM-YYYY'),current_user,current_timestamp);
END IF;
RETURN NULL;
END; 
$$ language plpgsql; 
CREATE TRIGGER audita_modif_empleados AFTER UPDATE ON empleado 
FOR EACH ROW EXECUTE PROCEDURE audita_modif_empleados(); 