PostgreSQL 触发器:示例创建、列表和删除
PostgreSQL 中的触发器是什么?
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 是关键字,用于确定触发器何时被调用。
event-name 是导致触发器被调用的事件的名称。它可以是 INSERT、UPDATE、DELETE 等。
table-name 是要创建触发器的表的名称。
如果触发器是为 INSERT 操作创建的,则必须添加 ON column-name 参数。
以下语法对此进行了演示
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL 创建触发器示例
我们将使用下面的 Price 表
价格
让我们创建另一个表 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();
让我们向 Price 表插入一条新记录
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 执行所有这三个操作。
如何使用 pgAdmin 在 PostgreSQL 中创建触发器
这是您可以使用 pgAdmin 在 Postgres 中创建触发器的方法
步骤 1) 登录您的 pgAdmin 账户
打开 pgAdmin 并使用您的凭据登录您的账户
步骤 2) 创建演示数据库
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 输入查询
要创建 Price_Audits 表,请在编辑器中键入查询
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
步骤 4) 执行查询
点击 Execute 按钮
步骤 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
摘要
- PostgreSQL 触发器是指在数据库对象(如表)上发生数据库事件时自动触发的函数。
- 此类数据库事件的示例包括 INSERT、UPDATE、DELETE 等。
- 触发器仅在其创建的数据库对象的生命周期内存在。
- 如果数据库对象被删除,触发器也将被删除。
- PostgreSQL 触发器使用 CREATE TRIGGER 语句创建。
- 每个触发器都与一个函数相关联,该函数说明触发器在被调用时将执行什么操作。