PostgreSQL触发器

本文概述

  • 关于触发器的要点
  • PostgreSQL创建触发器
  • PostgreSQL触发器的用法
  • 使用触发器的优势
PostgreSQL触发器是一组操作或数据库回调函数, 当在指定表上执行指定的数据库事件(即INSERT, UPDATE, DELETE或TRUNCATE语句)时, 它们会自动运行。触发器用于验证输入数据, 执行业务规则, 保留审计跟踪等。
关于触发器的要点 在以下情况下执行/调用PostgreSQL:
在尝试操作之前(在检查约束并尝试INSERT, UPDATE或DELETE之前)。
或者, 在操作完成之后(检查约束并且完成INSERT, UPDATE或DELETE之后)。
或者, 代替操作(对于视图进行插入, 更新或删除)
对于该操作修改的每一行, 都将一次调用标记为FOR EACH ROWS的触发器。另一方面, 标记为FOR STATE STATEMENT的触发器仅对任何给定操作执行一次, 无论其修改了多少行。
你可以为同一事件定义相同种类的多个触发器, 但条件是它们将按名称的字母顺序触发。
触发器与其关联的表被删除时, 触发器将被自动删除。
PostgreSQL创建触发器 CREATE TRIGGER语句用于在PostgreSQL表中创建新的触发器。当表发生特定事件(即INSERT, UPDATE和DELETE)时, 将激活该功能。
句法:
CREATETRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name ON table_name [ -- Trigger logic goes here.... ];

在这里, event_name可以是对提到的表table_name的INSERT, UPDATE, DELETE和TRUNCATE数据库操作。你可以选择在表名称后指定FOR EACH ROW。
让我们看看在INSERT操作上创建触发器的语法。
CREATETRIGGER trigger_name AFTER INSERT ON column_name ON table_name [ -- Trigger logic goes here.... ];

让我们以一个示例来演示PostgreSQL创建触发器AFTER INSERT语句。
请参阅以下示例:
在下面的示例中, 我们对插入到COMPANY表中的每个记录进行审计试用。
通过使用以下查询创建一个名为COMPANY的表:
CREATE TABLE COMPANY( ID INT PRIMARY KEYNOT NULL, NAMETEXTNOT NULL, AGEINTNOT NULL, ADDRESSCHAR(50), SALARYREAL );

为了保持审计试用状态, 我们将创建一个名为AUDIT的新表, 只要在COMPANY表中有新记录的条目, 就会插入日志消息。
通过使用以下查询, 创建另一个表Audit:
CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL );

在公司表上创建触发器之前, 首先创建一个名为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;

PostgreSQL触发器

文章图片
现在, 使用以下查询在COMPANY表上创建触发器:
执行以下查询:
CREATE TRIGGER example_trigger AFTER INSERT ON COMPANY FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();

PostgreSQL触发器

文章图片
在COMPANY表中插入一些值。
PostgreSQL触发器

文章图片
同时, 将在AUDIT表中创建两个记录。这些记录是触发的结果, 我们在COMPANY表的AFTER INSERT上创建了这些记录。
PostgreSQL触发器

文章图片
PostgreSQL触发器的用法 【PostgreSQL触发器】PostgreSQL触发器可用于以下目的:
  • 验证输入数据。
  • 实施业务规则。
  • 为另一个文件上新插入的行生成一个唯一值。
  • 写入其他文件以进行审计跟踪。
  • 从其他文件中查询以进行交叉引用。
  • 访问系统功能。
  • 将数据复制到不同的文件以实现数据一致性。
使用触发器的优势
  • 它加快了应用程序的开发速度。因为数据库存储触发器, 所以你不必将触发器操作编码到每个数据库应用程序中。
  • 全球执行业务规则。定义一次触发器, 然后将其重新用于使用该数据库的任何应用程序。
  • 易于维护。如果业务策略发生更改, 则只需要更改相应的触发程序, 而不必更改每个应用程序。
  • 改善客户端/服务器环境中的性能。结果返回之前, 所有规则都在服务器中运行。

    推荐阅读