【数据库】通过触发器实现审计日志记录(记录增、删、改)

#创建测试表
CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

#变更记录表
CREATE TABLE "public"."company_log" (
"id" int4 NOT NULL,
"name" text COLLATE "default" NOT NULL,
"age" int4 NOT NULL,
"address" char(50) COLLATE "default",
"salary" float4,
"s_id" int8 DEFAULT nextval('company_log_s_id_seq'::regclass) NOT NULL,
CONSTRAINT "company_log_pkey" PRIMARY KEY ("s_id")
)
WITH (OIDS=FALSE)
;

ALTER TABLE "public"."company_log" OWNER TO "postgres";
#审计日志表
CREATE TABLE "public"."audit_log" (
"id" int8 DEFAULT nextval('audit_log_id_seq'::regclass) NOT NULL,
"table_name" varchar(255) COLLATE "default",
"operation" varchar(255) COLLATE "default",
"update_time" text COLLATE "default",
"table_id" int8,
CONSTRAINT "audit_log_pkey" PRIMARY KEY ("id")
)
WITH (OIDS=FALSE)
;

ALTER TABLE "public"."audit_log" OWNER TO "postgres";



#创建触发器函数
CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$
 DECLARE
  tid INTEGER;
   BEGIN
			if (TG_OP='DELETE' OR TG_OP='UPDATE' ) THEN
INSERT INTO company_log (ID,NAME,AGE,ADDRESS,SALARY) VALUES (OLD.id,OLD.name, OLD.age, OLD.address, OLD.salary) RETURNING s_id into tid;

  ELSEIF (TG_OP='INSERT') THEN
    INSERT INTO company_log (ID,NAME,AGE,ADDRESS,SALARY) VALUES (NEW.id,NEW.name, NEW.age, NEW.address, NEW.salary) RETURNING s_id into tid;

  END IF;
      INSERT INTO audit_log(table_name, operation,update_time,table_id) VALUES ('company',TG_OP, current_timestamp,tid);
      RETURN NEW;


   END;

$example_table$ LANGUAGE plpgsql;


#创建触发器
create trigger company_trigger
after insert or update or delete on company
	for each row execute procedure auditlogfunc();
#执行测试
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (11, 'Paul', 32, 'California', 20000.00 );

  实现效果

company表

触发更新的company_log表

审计日志表 audit_log

 

以上周只是简单的实现,比如如何在触发器中拿到登录的用户和ip信息,确定是当前某个用户的操作,这还是一个问题

后续会做更新

 
 

 

转载于:https://www.cnblogs.com/mrwh/p/11321200.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值