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。

热门文章

优秀文章