一,前人总结
1.触发器在指定的数据库事件发生时调用
2.语法
create trigger trigger_name
{before(在执行操作之前触发)|after(在执行操作之后触发)|instead(更新操作 视图)}
{event(insert,update,delete,truncate)}
on table_name
{for each row(对指定操作的每一行调用一次)|for each statement (只会为任何指定的操作执行一次,不管修改多少行)}
execute procedure (触发的函数)
在这里插入图片描述
二,语句
1 创建触发器
语法见 一,2
2 触发器函数
在创建触发器之前,首先要创建一个触发器函数,它是指一个没有参数并且返回tigger类型的函数
在这里插入图片描述

3 查看触发器
select * from pg_trigger;
查看特定表的触发器
select tgname from pg_trigger,pg_class where tgrelid=pg_class.oid and relname=’company’;
4删除触发器
drop trigger example_trigger on company;
5启用/禁用触发器
a.启用或禁用所有触发器
启用
select fn_triggerall(true)
禁用
select fn_triggerall(false)
b.启用或禁用当前会话的触发器
禁用
SET session_replication_role = replica;
启用
SET session_replication_role = DEFAULT;
c.启用或禁用某个表的某个触发器
启用
ALTER TABLE table_name DISABLE TRIGGER trigger_name;
禁用
ALTER TABLE table_name ENABLE TRIGGER trigger_name
6总结
在一个表上创建一个触发器,触发器就定义了事件发生时会触发的事情(比如执行一个函数)
无非是有一个触发器函数会用到一个触发之后写入的表,再一个触发器创建语句
然后在目标表上创建了触发器之后,当对目标表进行一定的操作时,就会触发触发器函数,触发器函数就会对触发器那个表进行操作
7 查询触发器

select nspname as schema名称,relname as 表名,tgname as 触发器名称,t4.proname as 触发器函数,'dml_red,dml_err_log' as 中间表
from pg_trigger t1,pg_class t2,pg_namespace t3,pg_proc t4
where t1.tgrelid=t2.oid and t2.relnamespace=t3.oid and t1.tgfoid=t4.oid
and tgname like 'tri_%_log'  and tgenabled!='D' order by nspname;

目标表(要创建触发器的表)
触发器函数(一旦对目标表发生更改或者数据库事件则执行该函数,该函数定义内容是插入数据到审计表)
审计表:如果目标表发生某个事件,这个表就会插入一条数据.
这三者的关系就像两个箱子一个机器.

把事件发生之后触发器被调用,则会自动创建一些特殊变量,把这些变量按照需求写入到审计表里边去

注:本文仅供自己学习,如有侵权,请私信

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐