PostgreSQL Alter Trigger修改触发器
在本节中,我们将了解PostgreSQL ALTER TRIGGER命令的工作原理,并查看在 PostgreSQL 中从指定表更改触发器或重命名触发器的示例。
什么是 PostgreSQL ALTER TRIGGER 命令?
在PostgreSQL Trigger中,下一个命令是Alter Trigger命令,用于重命名现有触发器。
PostgreSQL Alter 触发器命令的语法
下图用于更改表中的触发器:
ALTER TRIGGER trigger_name
ON table_name
RENAME TO new_trigger_name;
在上面的语法中,我们使用了以下参数:
参数 | 描述 |
---|---|
触发器名称 | 它用于定义我们需要重命名的触发器名称,它在ALTER TRIGGER关键字之后被提及。 |
表名 | table_name参数用于定义连接到触发器的表名。它用在ON关键字之后。 |
新触发器名称 | 它用于指定触发器的新名称。并且写在RENAME TO关键字之后。 |
PostgreSQL ALTER TRIGGER 命令示例
让我们看一个示例来了解PostgreSQL Alter Trigger命令的工作原理。
我们正在使用 CREATE 命令的帮助创建一个新表作为Student并使用INSERT 命令插入一些值。
第1步:创建新表
要将Student创建到Organization 数据库中,我们使用CREATE命令。
但是,在创建Student表之前,我们将使用DROP TABLE命令检查Organization数据库中是否已经存在类似的表。
DROP TABLE IF EXISTS Student;
执行以上命令后,我们会得到如下窗口信息: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)
);
执行上述命令后,我们将收到以下消息:学生表已成功创建到组织数据库中。
第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()函数。
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);
执行上述命令后,我们将得到如下消息窗口,显示特定值已成功插入到Student表中。
第5步:更新值
插入新行后,我们将使用以下UPDATE命令更新Student_id 1 的奖学金:
UPDATE Student
SET scholarship = 200000
WHERE Student_id = 1;
在执行上述命令时,触发器被执行并引发错误,表明奖学金不能提高那么高。
第6步:改变触发命令
要解决上述错误,我们将使用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。
热门文章
优秀文章