📜  PostgreSQL ALTER触发器

📅  最后修改于: 2020-11-30 09:30:59             🧑  作者: Mango

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;

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

Parameters Description
Trigger_name It is used to define the trigger name that we need to rename, and it is mentioned after the ALTER TRIGGER keyword.
Table_name The table_name parameter is used to define the table name, which is connected to the trigger. And it is used after the ON keyword.
New_trigger_name It is used to specify the new name of the trigger. And it is written after the RENAME TO keyword.

PostgreSQL ALTER TRIGGER命令的例子

让我们看一个示例示例,以了解PostgreSQL Alter Trigger命令的工作。

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

步骤1:创建一个新表

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

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

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)
);

输出量

执行上述命令后,我们将收到以下消息: Student表已成功创建到Organization数据库中。

步骤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学生表中插入带有INSERT命令帮助的新行:

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;

输出量

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

步骤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中查看触发器:

步骤1

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

第2步

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

postgres=# \c Organization 

输出量

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

第三步

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

Organization=# \dS Student

输出量

实现上述命令后,我们将获得以下输出,其中显示了现有触发器,这是组织数据库中存在的Scholarship_before_update:


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

更改触发器

PostgreSQL中,不包含OR REPLACE命令,该命令为我们提供了更改触发器说明的功能,如函数,将在执行触发器时实现。

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

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

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

步骤1:开始交易

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

BEGIN;

输出量

执行完上述命令后,我们将获得以下消息窗口,该窗口显示指定的命令已成功实现。

步骤2:使用DROP触发命令

成功启动事务处理过程之后,我们将执行以下DROP TRIGGER命令:

DROP TRIGGER IF EXISTS scholarship_before_update 
on Student;

输出量

实施上述命令后,我们将获得以下输出,该输出显示特定触发器已成功从Student表中删除。

步骤3:建立新的触发器

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

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

输出量

实施上述命令后,我们将获得以下消息窗口,该窗口显示已成功为Student表插入特定的触发器。

步骤4:提交交易

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

COMMIT;

输出量

实施上述命令后,我们将获得以下消息窗口,该窗口显示已成功为Student表提交事务。

总览

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

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