Postgresql 专题
专题目录
您的位置:database > Postgresql专题 > PostgreSQL触发器
PostgreSQL触发器
作者:--    发布时间:2019-11-20

postgresql触发器是一组动作或数据库回调函数,它们在指定的表上执行指定的数据库事件(即,insertupdatedeletetruncate语句)时自动运行。 触发器用于验证输入数据,执行业务规则,保持审计跟踪等。

触发器的重点知识

  1. postgresql在以下情况下执行/调用触发器:在尝试操作之前(在检查约束并尝试insertupdatedelete之前)。或者在操作完成后(在检查约束并且insertupdatedelete完成后)。或者不是操作(在视图中insertupdatedelete的情况下)

  2. 对于操作修改的每一行,都会调用一个标记为for each rows的触发器。 另一方面,标记为for each statement的触发器只对任何给定的操作执行一次,而不管它修改多少行。

  3. 您可以为同一事件定义同一类型的多个触发器,但条件是按名称按字母顺序触发。

  4. 当与它们相关联的表被删除时,触发器被自动删除。

postgresql创建触发器

create trigger语句用于在postgresql表中创建一个新的触发器。 当表发生特定事件(即insertupdatedelete)时,它被激活。

语法

create  trigger trigger_name [before|after|instead of] event_name  
on table_name  
[  
 -- trigger logic goes here....  
];

在这里,event_name可以是insertupdatedeletetruncate数据库操作上提到的表table_name。 您可以选择在表名后指定for each row

下面来看看看如何在insert操作中创建触发器的语法。

create  trigger trigger_name after insert on column_name  
on table_name  
[  
 -- trigger logic goes here....  
];

触发器例子

下面举个例子来演示postgresql在insert语句之后创建触发器。在以下示例中,我们对每个记录插入到company表中进行审核(审计)。

使用以下查询创建一个名为company的表:

create table company(  
   id int primary key     not null,  
   name           text    not null,  
   age            int     not null,  
   address        char(50),  
   salary         real  
);

为了保存审计/审核,我们将创建一个名为audit的新表,只要在company表中有一个新记录的条目,就会插入日志消息。

使用以下查询语句创建另一个表audit

create table audit(  
    emp_id int not null,  
    entry_date text not null  
);

company表上创建触发器之前,首先创建一个名为auditlogfunc()的函数/过程。

执行以下查询语句来创建函数/过程:

create or replace function auditlogfunc() returns trigger as $example_table$  
    begin  
        insert into audit(emp_id, entry_date) values (new.id, current_timestamp);  
        return new;   
    end;  
$example_table$ language plpgsql;

执行结果如下所示-

现在通过使用以下查询语句在company表上创建一个触发器:

create trigger example_trigger after insert on company  
for each row execute procedure auditlogfunc();

执行结果如下所示-

company表中插入一些数据记录,以验证触发器执行情况。

insert into company values(1, '小米科技', 8, '北京市朝阳区', 9999);
insert into company values(2, '京东中科', 6, '广州市天河区', 8999);

在执行上面两条插入语句后,现我们来看audit表是否有自动插入两条审核记录。

可以确定的是在插入数据后触发了触发器,postgresql也自动向audit表中创建/插入两个记录。 这些记录是触发的结果,这是因为我们在after insert on company表上创建了这些记录。

postgresql触发器的使用

postgresql触发器可用于以下目的:

  • 验证输入数据。
  • 执行业务规则。
  • 为不同文件中新插入的行生成唯一值。
  • 写入其他文件以进行审计跟踪。
  • 从其他文件查询交叉引用目的。
  • 访问系统函数。
  • 将数据复制到不同的文件以实现数据一致性。

使用触发器的优点

  • 它提高了应用程序的开发速度。 因为数据库存储触发器,所以您不必将触发器操作编码到每个数据库应用程序中。
  • 全局执法业务规则。定义触发器一次,然后将其重用于使用数据库的任何应用程序。
  • 更容易维护 如果业务策略发生变化,则只需更改相应的触发程序,而不是每个应用程序。
  • 提高客户/服务器环境的性能。 所有规则在结果返回之前在服务器中运行。

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册