PostgreSQL 更改触发器


PostgreSQL 更改触发器

在本节中,我们将了解PostgreSQL ALTER TRIGGER命令的工作方式,并查看从 PostgreSQL 中的指定表更改触发器或重命名触发器的示例。

什么是 PostgreSQL ALTER TRIGGER 命令?

PostgreSQL Trigger 中,下一个命令是Alter Trigger命令,用于重命名现有触发器。

PostgreSQL Alter trigger 命令的语法

下图用于更改表中的触发器:

ALTER TRIGGER trigger_name  
ON table_name   
RENAME TO new_trigger_name;

在上面的语法中,我们使用了以下参数:

参数 描述
Trigger_name 用于定义我们需要重命名的触发器名称,在ALTER TRIGGER关键字之后提到。
Table_name 表名参数用于定义表名称,其被连接到触发器。它用在ON关键字之后。
New_trigger_name 它用于指定触发器的新名称。它写在RENAME TO关键字之后。

PostgreSQL ALTER TRIGGER 命令示例

让我们看一个示例示例来了解PostgreSQL Alter Trigger命令的工作原理

我们正在使用 CREATE 命令的帮助创建一个作为Student 的\新表,并使用INSERT 命令插入一些值。

Step1:新建表

要将学生\创建到组织数据库中,我们使用CREATE命令。

但是,在创建Student\表之前,我们将使用DROP TABLE命令来检查组织数据库中是否已经存在类似的表。

DROP TABLE IF EXISTS Student;

输出

执行上述命令后,我们会得到如下窗口信息:Student\表不存在。

PostgreSQL ALTER 触发器

*Student*\表包含各列如student_id数据,Student_name,奖学金栏,在这里我们使用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\表已成功创建到组织数据库中。

PostgreSQL ALTER 触发器

Step2:创建一个新函数

成功创建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()函数已成功创建到组织数据库中。

PostgreSQL ALTER 触发器

第三步:创建一个新的触发器

创建check_scholarship()函数后,我们将在更新奖学金之前执行check_scholarship()函数的更新触发器之前在学生\表上创建一个新触发器

CREATE TRIGGER before_update_scholarship  
  BEFORE UPDATE  
  ON Student  
  FOR EACH ROW  
  EXECUTE PROCEDURE check_scholarship ();

输出

执行上面的before_update_scholarship命令后,我们会得到如下消息窗口,显示为Student\表指定的触发器已经插入成功。

PostgreSQL ALTER 触发器

Step4:插入新值

一旦功能和触发已成功生成,我们将插入一个新行的INSERT的命令的帮助到学生\表:

INSERT INTO Student(Student_name, scholarship)  
VALUES('Mike Ross',100000);

输出

执行上述命令后,我们将得到以下消息窗口,显示特定值已成功插入到Student\表中。

PostgreSQL ALTER 触发器

步骤 5:更新值

插入新行后,我们将使用以下UPDATE命令更新Student_id 1的奖学金:

UPDATE Student  
SET scholarship = 200000  
WHERE Student_id = 1;

输出

在执行上述命令时,触发器被执行并引发错误,表明奖学金提高不能那么高。

PostgreSQL ALTER 触发器

第五步:改变触发命令

为了解决上述错误,我们将使用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

PostgreSQL ALTER 触发器

查看触发器 SQL shell (PSQL)

我们将按照以下过程在psql 中查看触发器

步骤1

首先,我们将在我们的本地系统中打开psql,我们将连接到我们要创建表的数据库。

第2步

为了连接组织数据库,我们将输入以下命令:

postgres=# \c Organization

输出

执行上述命令后,我们将得到以下输出:

PostgreSQL ALTER 触发器

Step3

我们现在将输入以下命令以查看与组织数据库中的表链接的所有触发器。

Organization=# \dS Student

输出

执行上述命令后,我们将得到以下输出,其中显示了现有的触发器,即组织数据库中存在的Scholarship_before_update

PostgreSQL ALTER 触发器

注意:在\dS命令中,字母S是大写的,或者如果我们在字母s是小写的地方使用\ds,则会出现以下错误:

PostgreSQL ALTER 触发器

更改触发器

在PostgreSQL 中,不包含OR REPLACE命令,它为我们提供了更改触发器解释的功能,如执行触发器时将实现的功能

因此,我们可以将这些命令包装在一个事务中,也可以使用CREATE TRIGGER 和 DROP TRIGGER命令。

让我们看一个示例以了解DROP TRIGGERCREATE TRIGGER命令如何在事务中工作。

下面的命令表示如何将Scholarship_before_update触发器的check_scholarship()函数更改为validate_scholarship

步骤 1:开始交易

要开始交易,我们可以使用以下语句:

BEGIN;

输出

执行完上面的命令后,我们会得到下面的消息窗口,表示指定的命令已经成功执行。

PostgreSQL ALTER 触发器

Step2:使用DROP触发命令

成功启动交易流程后,我们将执行以下DROP TRIGGER命令:

DROP TRIGGER IF EXISTS scholarship_before_update   
on Student;

输出

执行上述命令后,我们将得到以下输出,显示特定触发器已成功从Student\表中删除。

PostgreSQL ALTER 触发器

Step3:创建一个新的触发器

在成功删除Scholarship_before_update 触发器后,我们创建一个具有相似名称的新触发器Scholarship_before_udpate,如下面的命令所示:

CREATE TRIGGER scholarship_before_udpate  
  BEFORE UPDATE  
  ON Student  
  FOR EACH ROW  
  EXECUTE PROCEDURE check_scholarship();

输出

执行上述命令后,我们将获得以下消息窗口,其中显示已成功为Student\表插入特定触发器。

PostgreSQL ALTER 触发器

Step4:提交交易

为了使更改对其他会话(或用户)可见,我们需要在COMMIT命令的帮助下提交事务,如下所示:

COMMIT;

输出

执行完上面的命令后,我们会得到如下消息窗口,显示Student\表的事务已经提交成功。

PostgreSQL ALTER 触发器

概述

PostgreSQL ALTER Trigger部分,我们学习了以下主题:

  • 为了重命名触发器,我们在示例中使用了PostgreSQL Alter Trigger 命令
  • 要使用新触发器更改触发器,我们使用了一对DROP TRIGGER 和 CREATE TRIGGER命令。