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