个性化阅读
专注于IT技术分析

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)时, 将激活该功能。

句法:

CREATE  TRIGGER 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操作上创建触发器的语法。

CREATE  TRIGGER 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 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
);

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

现在, 使用以下查询在COMPANY表上创建触发器:

执行以下查询:

CREATE TRIGGER example_trigger AFTER INSERT ON COMPANY
FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
PostgreSQL触发器2

在COMPANY表中插入一些值。

PostgreSQL触发器3

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

PostgreSQL触发器4

PostgreSQL触发器的用法

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

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

使用触发器的优势

  • 它加快了应用程序的开发速度。因为数据库存储触发器, 所以你不必将触发器操作编码到每个数据库应用程序中。
  • 全球执行业务规则。定义一次触发器, 然后将其重新用于使用该数据库的任何应用程序。
  • 易于维护。如果业务策略发生更改, 则只需要更改相应的触发程序, 而不必更改每个应用程序。
  • 改善客户端/服务器环境中的性能。结果返回之前, 所有规则都在服务器中运行。
赞(0)
未经允许不得转载:srcmini » PostgreSQL触发器

评论 抢沙发

评论前必须登录!