PostgreSQL 修改触发器
在本节中,我们将了解 PostgreSQL ALTER TRIGGER 命令的工作原理,并查看更改触发器或从PostgreSQL中的指定表重命名触发器。
什么是PostgreSQL ALTER TRIGGER命令?
在 PostgreSQL触发器中,下一个命令是 Alter Trigger 命令,该命令用于重命名现有触发器。
PostgreSQL Alter触发器命令的语法
以下插图用于更改表中的触发器:
ALTER TRIGGER trigger_name
ON table_name
RENAME TO new_trigger_name;
在上面的语法中,我们使用了以下参数:
参数 |
说明 |
trigger_name |
它用于定义我们需要重命名的触发器名称,并在 ALTER TRIGGER 关键字之后提及。 |
Table_name |
table_name 参数用于定义与触发器连接的表名。它在 ON 关键字之后使用。 |
New_trigger_name |
它用于指定触发器的新名称。它写在 RENAME TO 关键字之后。 |
PostgreSQL ALTER TRIGGER命令示例
让我们看一个示例示例,以了解 PostgreSQL Alter Trigger 命令的工作。
我们将在CREATE命令的帮助下以 Student 的形式创建一个新表,并使用插入命令。
第1步: 创建新表
要创建 学生 放入组织数据库,我们使用 CREATE 命令。
但是,在创建 Student 表,我们将使用 DROP TABLE 命令检查 Organization 数据库中是否已经存在类似的表。
DROP TABLE if EXISTS Student;
输出
执行上述命令后,我们将获得以下窗口消息: Student 表不存在。
学生 表包含各个列,例如 Student_id,Student_name,Scholarship 列,其中我们将 Student_id 用作 GENERATED ALWAYS AS IDENTITY约束 >。
CREATE TABLE Student(
Student_id int GENERATED ALWAYS AS IDENTITY,
Student_name VARCHAR(50) NOT null,
Scholarship decimal(11,2) not null default 0,
PRIMARY KEY(Student_id)
);
输出
在执行上述命令时,我们将收到以下消息: Student 表具有已成功创建到组织数据库中。
第2步: 创建新函数
成功创建 Student 表后,我们将创建一个新函数,该函数引发异常如果新奖学金比旧奖学金大100%:
CREATE OR REPLACE FUNCTION check_scholarship()
RETURNS TRIGGER
LANGUAGE plpgsql
AS
$
BEGIN
if (NEW. scholarship-OLD. scholarship) / OLD. scholarship >= 1 THEN
RAISE 'The scholarship raise cannot that high.';
END IF;
return NEW;
END;
$
输出
在执行上述命令时,我们将得到以下消息,该消息显示已创建 check_scholarship()函数成功地进入组织数据库。
第3步: 创建新触发器
创建 check_scholarship()函数后,我们将在 Student 表,然后执行 check_scholarship()的更新触发 strong>功能,然后再更新奖学金。
CREATE TRIGGER before_update_scholarship
BEFORE UPDATE
ON Student
for EACH ROW
EXECUTE PROCEDURE check_scholarship ();
输出
执行上面的 before_update_scholarship 命令后,我们将获得以下消息窗口,该窗口显示已插入指定的触发器 Student 表成功。
第4步: 插入新值
一旦成功生成了函数和触发器,我们将插入 INSERT的命令帮助在 Student 表中插入新行:
INSERT INTO Student(Student_name, scholarship)
VALUES('Mike Ross',100000);
输出
执行上述命令后,我们将获得以下消息窗口,显示特定值已成功插入 学生表 。
Step5: 更新值
插入新行后,我们将使用以下 UPDATE 命令更新 Student_id 1的奖学金:
UPDATE Student
SET scholarship = 200000
WHERE Student_id = 1;
输出
在执行上述命令时,触发器被执行并引发错误,表明奖学金的提高不能那么高。
第5步: 更改触发命令
要解决上述错误,我们将使用 ALTER TRIGGER 命令将 before_update_scholarship 触发器重命名为 scholarship_before_update 。
ALTER TRIGGER before_update_scholarship
ON Student
RENAME TO scholarship_before_update;
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示特定触发器已从 before_update_scholarship成功重命名触发 scholarship_before_update 。
查看触发器SQL Shell(PSQL)
我们将按照以下过程在 psql中查看触发器:
Step1
首先,我们将在本地系统中打开 psql ,然后连接到要创建表的数据库。
Step2
要连接 Organization 数据库,我们将输入以下命令:
postgres=# \c Organization
输出
执行上述命令后,我们将获得以下输出:
Step3
我们现在将输入以下命令,以查看与组织数据库。
Organization=# \dS Student
输出
在执行上述命令时,我们将获得以下输出,其中显示了现有触发器,该触发器存在于 scholarship_before_update 组织数据库:
注意: 在\ dS命令中,字母S在大写字母中,或者如果我们在字母s在小写字母中使用\ ds,则会发生以下错误:
更改触发器
在 PostgreSQL 中,不包含 OR REPLACE 命令,该命令使我们能够更改触发说明,例如 functio n,将在执行触发时执行。
因此,我们可以将这些命令包装为事务 >,并使用 CREATE TRIGGER和DROP TRIGGER 命令。
让我们看一个示例示例,以了解 > DROP TRIGGER 和 CREATE TRIGGER 命令在事务中有效。
以下命令表示如何将 scholarship_before_update 触发器的 check_scholarship()函数更改为 validate_奖学金:
第一步: 开始交易
要开始交易,我们可以使用以下语句:
输出
执行上述命令后,我们将获得以下消息窗口,该窗口指示指定的命令已成功实现。
Step2: 使用DROP触发命令
成功后在开始交易过程时,我们将执行以下 DROP TRIGGER 命令:
DROP TRIGGER if EXISTS scholarship_before_update
on Student;
输出
执行上述命令后,我们将获得以下输出,该输出显示特定触发器已成功从 删除学生 表。
步骤3: 创建新触发器
成功删除 scholarship_before_update触发器后,我们创建一个具有相似名称的新触发器 scholarship_before_udpate ,如com以下要求:
CREATE TRIGGER scholarship_before_udpate
BEFORE UPDATE
ON Student
for EACH ROW
EXECUTE PROCEDURE check_scholarship();
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示已成功为学生 表。
第4步: 提交事务
要使更改对其他会话(或用户)可见,我们需要在 COMMIT 命令的帮助下提交事务,如图所示下方:
输出
执行上述命令后,我们将获得以下消息窗口,该窗口显示 事务已成功提交学生 表。
概述
在 PostgreSQL ALTER Trigger 部分中,我们学习了以下主题:
要重命名触发器,我们使用 PostgreSQL Alter Trigger命令作为示例。
要使用新触发器更改触发器,我们使用了一对 DROP TRIGGER和CREATE TRIGGER 命令。