当前位置:   article > 正文

PostgreSql TRIGGER 触发器简单样例

postgresql trigger

1.创建测试表、视图

  1. CREATE TABLE COMPANY(
  2. ID INT PRIMARY KEY NOT NULL,
  3. NAME TEXT NOT NULL,
  4. AGE INT NOT NULL,
  5. ADDRESS CHAR(50),
  6. SALARY REAL
  7. );
  8. CREATE TABLE AUDIT_HIS(
  9. EMP_ID INT NOT NULL,
  10. EMP_NAME TEXT NOT NULL,
  11. ENTRY_DATE TEXT NOT NULL
  12. );
  13. CREATE TABLE AUDIT(
  14. EMP_ID INT NOT NULL,
  15. EMP_NAME TEXT NOT NULL,
  16. ENTRY_DATE TEXT NOT NULL
  17. );
  18. CREATE OR REPLACE VIEW "public"."company_view" AS
  19. SELECT company.id,company.name,company.age
  20. FROM company;

 2.创建触发器函数

  1. CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $$
  2. BEGIN
  3. INSERT INTO AUDIT_HIS(EMP_ID,EMP_NAME,ENTRY_DATE) VALUES (OLD.ID,OLD.NAME,current_timestamp);
  4. INSERT INTO AUDIT(EMP_ID,EMP_NAME,ENTRY_DATE) VALUES (NEW.ID,NEW.NAME,current_timestamp);
  5. RETURN NULL;
  6. END;
  7. $$ LANGUAGE plpgsql;

注:

a.触发器函数是触发器触发时调用,函数返回的类型必须是TRIGGER ,且不能有任何参数

b.postgresql触发器函数中自带一些特殊变量:

  • NEW:数据类型是record,在insert、update操作触发时存储新的数据行
  • OLD:数据类型是record,在update、delete操作触发时存储旧的数据行
  • TG_OP:内容为“INSERT”,“UPDATE”,“DELETE”,“TRUNCATE”,用于指定DML语句类型
  • TG_TABLE_NAME:触发器所在表的表名称 TG_SCHEMA_NAME:触发器所在表的模式 

3.创建触发器

3.1表触发器

  1. CREATE TRIGGER example_trigger AFTER INSERT OR UPDATE ON COMPANY
  2. FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();

3.2视图触发器

  1. CREATE TRIGGER company_view_trigger AFTER UPDATE ON company_view
  2. EXECUTE PROCEDURE auditlogfunc();

注:视图触发器不支持行级,即 不能添加FOR EACH ROW

4.删除触发器

DROP TRIGGER example_trigger on COMPANY;

5.删除函数

drop function function_name (parameters_list);

6.查看所有触发器

SELECT * FROM pg_trigger;

 7.测试

  1. INSERT INTO COMPANY VALUES(1, '小米科技', 8, '北京市朝阳区', 9999);
  2. UPDATE COMPANY SET NAME ='阿里巴巴' WHERE ID ='1';

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/786004
推荐阅读
相关标签
  

闽ICP备14008679号