PostgreSQL 触发器:创建、列出和删除(附示例)

什么是触发器 PostgreSQL?

A PostgreSQL 触发端口 是数据库对象上发生数据库事件时自动触发的功能。例如,表。可以激活触发器的数据库事件示例包括 INSERT、UPDATE、DELETE 等。此外,当您为表创建触发器时,当该表被删除时,触发器将自动被删除。

触发器的使用方法 PostgreSQL?

触发器可以在创建时用 FOR EACH ROW 运算符标记。对于操作修改的每一行,此类触发器都会被调用一次。触发器也可以在创建时用 FOR EACH STATEMENT 运算符标记。对于特定操作,此触发器只会执行一次。

PostgreSQL 创建触发器

要创建触发器,我们使用 CREATE TRIGGER 函数。以下是该函数的语法:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name  
ON table-name  
[  
 -- Trigger logic  
];

trigger-name 是触发器的名称。

BEFORE、AFTER 和 INSTEAD OF 是确定何时调用触发器的关键字。

事件名称是触发触发器的事件名称。可以是 插入、更新、删除等。

table-name 是要创建触发器的表的名称。

如果要为 INSERT 操作创建触发器,则必须添加 ON column-name 参数。

以下语法证明了这一点:

CREATE TRIGGER trigger-name AFTER INSERT ON column-name  
ON table-name  
[  
 -- Trigger logic
];

PostgreSQL 创建触发器示例

我们将使用下面给出的价格表:

价格:

PostgreSQL 创建触发器

让我们创建另一个表 Price_Audits,我们将在其中记录对 Price 表所做的更改:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
);

我们现在可以定义一个名为 auditfunc 的新函数:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql;

上述函数将在表 Price_Audits 中插入一条记录,其中包括新行 ID 和创建该记录的时间。

现在我们有了触发器函数,我们应该将它绑定到我们的 Price 表。我们将给触发器命名为 price_trigger。在创建新记录之前,将自动调用触发器函数来记录更改。以下是触发器:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc();

让我们在价格表中插入一条新记录:

INSERT INTO Price 
VALUES (3, 400);

现在我们已经将一条记录插入 Price 表,还应将一条记录插入 Price_Audit 表。这将是我们在 Price 表上创建的触发器的结果。让我们检查一下:

SELECT * FROM Price_Audits;

这将返回以下内容:

PostgreSQL 创建触发器

扳機成功啟動。

Postgres 列表触发器

您在 PostgreSQL 存储在 pg_trigger 表中。要查看您在 数据库,通过运行 SELECT 命令查询表,如下所示:

SELECT tgname FROM pg_trigger;

这将返回以下内容:

Postgres 列表触发器

pg_trigger 表的 tgname 列表示触发器的名称。

Postgres 删除触发器

放下 PostgreSQL 触发器,我们使用 DROP TRIGGER 语句,语法如下:

DROP TRIGGER [IF EXISTS] trigger-name 
ON table-name [ CASCADE | RESTRICT ];

trigger-name 参数表示要删除的触发器的名称。

table-name 表示要从中删除触发器的表的名称。

IF EXISTS 子句尝试删除一个存在的触发器。如果您尝试在不使用 IF EXISTS 子句的情况下删除一个不存在的触发器,则会收到错误。

CASCADE 选项将帮助您自动删除所有依赖于触发器的对象。

如果使用 RESTRICT 选项,则如果对象依赖于触发器,则不会删除该触发器。

对于实施例:

要删除表 Price 上名为 example_trigger 的触发器,我们运行以下命令:

要删除表 Company 上名为 example_trigger 的触发器,请运行以下命令:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

使用 pgAdmin

现在让我们看看如何使用 pgAdmin 执行这三个操作。

如何在 PostgreSQL 使用 pgAdmin

以下是如何使用 pgAdmin 在 Postgres 中创建触发器:

步骤 1)登录你的 pgAdmin 账户

打开 pgAdmin 并使用您的凭据登录到您的帐户

步骤 2)创建演示数据库

  1. 从左侧导航栏中单击数据库。
  2. 单击“演示”。

在以下位置创建触发器 PostgreSQL 使用 pgAdmin

步骤 3)输入查询

要创建表 Price_Audits,请在编辑器中输入查询:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

步骤4)执行查询

单击执行按钮

在以下位置创建触发器 PostgreSQL 使用 pgAdmin

步骤 5)运行 auditfunc 的代码

运行以下代码来定义函数auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql

步骤 6)运行代码以创建触发器

运行以下代码来创建触发器 price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

步骤 7)插入新记录

  1. 运行以下命令将新记录插入到 Price 表中:
    INSERT INTO Price
    VALUES (3, 400)
  2. 运行以下命令检查记录是否已插入 Price_Audits 表:
    SELECT * FROM Price_Audits

    这应该返回以下内容:

在以下位置创建触发器 PostgreSQL 使用 pgAdmin

步骤 8)检查表内容

让我们检查一下 Price_Audits 表的内容:

使用 pgAdmin 列出触发器

步骤1) 运行以下命令检查数据库中的触发器:

SELECT tgname FROM pg_trigger

这将返回以下内容:

使用 pgAdmin 列出触发器

使用 pgAdmin 删除触发器

要删除表 Company 上名为 example_trigger 的触发器,请运行以下命令:

DROP TRIGGER example_trigger IF EXISTS
ON Company

结语

  • A PostgreSQL 触发器是指当数据库对象(例如表)上发生数据库事件时自动触发的功能。
  • 此类数据库事件的示例包括 INSERT、UPDATE、DELETE 等。
  • 触发器仅在创建它的数据库对象的生存期内存在。
  • 如果数据库对象被删除,触发器也将被删除。
  • PostgreSQL 触发器是使用 CREATE TRIGGER 语句创建的。
  • 每个触发器都与一个函数相关联,该函数说明触发器被调用时将执行的操作。

下载本教程使用的数据库

总结一下这篇文章: