Bitácoras Postgres 9.6 con/sin dblink


 Trigger sin dblink
 Base de datos 
  bdprueba
 Tabla
  tbestado
  tbbitacora 
TRIGGER FUNCTION
CREATE OR REPLACE FUNCTION public.log_accion()
  RETURNS trigger AS
$BODY$
begin
 if(TG_OP='DELETE') THEN
   INSERT INTO public.tbbitacora(usuario,ipusuario,accion, tabla, valoranterior, nuevovalor,fecharegistro)VALUES (USER,inet_client_addr(),TG_OP,TG_TABLE_NAME, OLD, NULL,now());
   return new;
 elseif (TG_OP='INSERT')then
   INSERT INTO public.bitacora(usuario,ipusuario,accion, tabla, valoranterior, nuevovalor,fecharegistro)VALUES (USER,inet_client_addr(),TG_OP,TG_TABLE_NAME, NULL, NEW,now());
  return new;
 elseif(TG_OP='UPDATE')then
  INSERT INTO public.tbbitacora(usuario,ipusuario,accion, tabla, valoranterior, nuevovalor,fecharegistro)VALUES (USER,inet_client_addr(),TG_OP,TG_TABLE_NAME, OLD, NEW,now());
 return new;
 end if;
 return null;
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.log_accion()
  OWNER TO postgres; 


TRIGGER

CREATE TRIGGER auditoria
  AFTER INSERT OR UPDATE OR DELETE
  ON public.tarea
  FOR EACH ROW
  EXECUTE PROCEDURE public.log_accion();

 
 Trigger con dblink
 Base de datos 
  bdprueba
  bdbitacora
 Tabla en bdprueba
  tbestado
 Tabla en bdbitacora
  tbbitacora

FUNCTION "conexion"

CREATE OR REPLACE FUNCTION public.conexion()
  RETURNS character varying AS
$BODY$
DECLARE
    fhost varchar    :='127.0.0.1';
    fdataBase varchar:='bdbitacora';
    fpuerto varchar  :='5432';
    fuser varchar    :='postgres';
    fpass varchar    :='123456';
BEGIN
    RETURN 'hostaddr='||fhost||' port='||fpuerto||' dbname='||fdataBase||' user='||fuser||' password='||fpass;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.conexion()
  OWNER TO postgres;


FUNCTION TRIGGER

CREATE OR REPLACE FUNCTION public.log_acciones()
  RETURNS trigger AS
$BODY$
DECLARE
usuario name;
pc_ip varchar;
BEGIN
usuario := current_user;
pc_ip := inet_client_addr();
 if(TG_OP='DELETE') THEN
   PERFORM dblink_exec(public.conexion(), 'INSERT INTO public.bitacora(usuario,ipusuario,accion, tabla, valoranterior, nuevovalor,fecharegistro)VALUES ('''||usuario||''','''||pc_ip||''','''||TG_OP||''','''||TG_TABLE_NAME||''','''||OLD||''', NULL,''now()'');');
   return new;
 elseif (TG_OP='INSERT')then
    PERFORM dblink_exec(public.conexion(), 'INSERT INTO public.bitacora(usuario,ipusuario,accion, tabla, valoranterior, nuevovalor,fecharegistro)VALUES ('''||usuario||''','''||pc_ip||''','''||TG_OP||''','''||TG_TABLE_NAME||''', NULL,'''||NEW||''',''now()'');');
  return new;
 elseif(TG_OP='UPDATE')then
  PERFORM dblink_exec(public.conexion(), 'INSERT INTO public.bitacora(usuario,ipusuario,accion, tabla, valoranterior, nuevovalor,fecharegistro)VALUES ('''||usuario||''','''||pc_ip||''','''||TG_OP||''','''||TG_TABLE_NAME||''','''||OLD||''','''||NEW||''',''now()'');');
 return new;
 end if;
 return null;
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.log_acciones()
  OWNER TO postgres;

 
TRIGGER

CREATE TRIGGER tr_logauditoria
  AFTER INSERT OR UPDATE OR DELETE
  ON public.estado
  FOR EACH ROW
  EXECUTE PROCEDURE public.log_acciones();

 

Comentarios

Entradas populares de este blog

ScriptCase

Configurar adminlte + yii2