PostgreSQL - Triggers(触发器)

PostgreSQL - Triggers(触发器) 首页 / PostgreSQL入门教程 / PostgreSQL - Triggers(触发器)

PostgreSQL 触发器是数据库回调函数,当发生指定的数据库事件时,它们会自动执行。

Triggers - 语法

创建 trigger 的基本语法如下-

链接:https://www.learnfk.comhttps://www.learnfk.com/postgresql/postgresql-triggers.html

来源:LearnFk无涯教程网

CREATE  TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name
ON table_name
[
 -- Trigger logic goes here....
];

在这里, event_name 可以是上述表上的 INSERT,DELETE, UPDATE,和 TRUNCATE 数据库操作table_name 。您可以选择在表名称后指定FOR EACH ROW。

以下是在表的一个或多个指定列上的UPDATE操作上创建触发器的语法,如下所示-

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name
ON table_name
[
 -- Trigger logic goes here....
];

Triggers - 示例

让无涯教程考虑一种情况,在这种情况下,无涯教程希望对COMPANY表中插入的每条记录进行审计试用,无涯教程将按如下方式重新创建。

testdb=# CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

为了保持审计试用状态,无涯教程将创建一个名为AUDIT的新表,只要在COMPANY表中有新记录的数据,就会插入日志消息-

testdb=# CREATE TABLE AUDIT(
   EMP_ID INT NOT NULL,
   ENTRY_DATE TEXT NOT NULL
);

在这里,ID是AUDIT记录ID,EMP_ID是ID,它将来自COMPANY表,当在COMPANY表中创建记录时DATE将保留时间戳。现在,让无涯教程在COMPANY表上创建触发器,如下所示:

无涯教程网

testdb=# CREATE TRIGGER example_trigger AFTER INSERT ON COMPANY
FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();

其中auditlogfunc()是PostgreSQL 过程并具有以下定义-

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表中插入记录,这将导致在AUDIT表中创建审核日志记录,因此,让无涯教程在COMPANY表中创建一条记录,如下所示-

testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

这将在COMPANY表中创建一条记录,如下所示-

 id | name | age | address      | salary
----+------+-----+--------------+--------
  1 | Paul |  32 | California   |  20000

同时,将在AUDIT表中创建一条记录,该记录是触发器的输出,该触发器是无涯教程在COMPANY表上的INSERT操作上创建的,同样,您可以根据需要在UPDATE和DELETE操作上创建触发器。

 emp_id |          entry_date
--------+-------------------------------
      1 | 2013-05-05 15:49:59.968+05:30
(1 row)

Triggers - 列出触发器

您可以从 pg_trigger 表中列出当前数据库中的所有触发器,如下所示-

testdb=# SELECT * FROM pg_trigger;

上面给出的PostgreSQL语句将列出所有触发器。

如果要列出特定表上的触发器,则将AND子句与表名一起使用,如下所示:

testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';

上面给出的PostgreSQL语句还将仅列出以下一项-

     tgname
-----------------
 example_trigger
(1 row)

Triggers - 删除触发器

以下是DROP命令,可用于删除现有触发器-

testdb=# DROP TRIGGER trigger_name;

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

技术与商业案例解读 -〔徐飞〕

邱岳的产品手记 -〔邱岳〕

零基础学Java -〔臧萌〕

MongoDB高手课 -〔唐建法(TJ)〕

深入浅出云计算 -〔何恺铎〕

软件设计之美 -〔郑晔〕

React Hooks 核心原理与实战 -〔王沛〕

手把手带你写一门编程语言 -〔宫文学〕

搞定音频技术 -〔冯建元 〕

好记忆不如烂笔头。留下您的足迹吧 :)