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 创建触发器示例
我们将使用下面给出的价格表:
价格:
让我们创建另一个表 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;
这将返回以下内容:
扳機成功啟動。
Postgres 列表触发器
您在 PostgreSQL 存储在 pg_trigger 表中。要查看您在 数据库,通过运行 SELECT 命令查询表,如下所示:
SELECT tgname FROM pg_trigger;
这将返回以下内容:
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)创建演示数据库
- 从左侧导航栏中单击数据库。
- 单击“演示”。
步骤 3)输入查询
要创建表 Price_Audits,请在编辑器中输入查询:
CREATE TABLE Price_Audits (
book_id INT NOT NULL,
entry_date text NOT NULL
)
步骤4)执行查询
单击执行按钮
步骤 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)插入新记录
- 运行以下命令将新记录插入到 Price 表中:
INSERT INTO Price VALUES (3, 400)
- 运行以下命令检查记录是否已插入 Price_Audits 表:
SELECT * FROM Price_Audits
这应该返回以下内容:
步骤 8)检查表内容
让我们检查一下 Price_Audits 表的内容:
使用 pgAdmin 列出触发器
步骤1) 运行以下命令检查数据库中的触发器:
SELECT tgname FROM pg_trigger
这将返回以下内容:
使用 pgAdmin 删除触发器
要删除表 Company 上名为 example_trigger 的触发器,请运行以下命令:
DROP TRIGGER example_trigger IF EXISTS ON Company
结语
- A PostgreSQL 触发器是指当数据库对象(例如表)上发生数据库事件时自动触发的功能。
- 此类数据库事件的示例包括 INSERT、UPDATE、DELETE 等。
- 触发器仅在创建它的数据库对象的生存期内存在。
- 如果数据库对象被删除,触发器也将被删除。
- PostgreSQL 触发器是使用 CREATE TRIGGER 语句创建的。
- 每个触发器都与一个函数相关联,该函数说明触发器被调用时将执行的操作。







