PostgreSQL更改触发器-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表不存在。
该*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表已成功创建到组织数据库中。
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()函数已成功创建到组织数据库中。
第三步:创建一个新的触发器
创建check_scholarship()函数后,我们将在更新奖学金之前执行check_scholarship()函数的更新触发器之前在学生表上创建一个新触发器。
CREATE TRIGGER before_update_scholarship
BEFORE UPDATE
ON Student
FOR EACH ROW
EXECUTE PROCEDURE check_scholarship ();
输出
执行上面的before_update_scholarship命令后,我们会得到如下消息窗口,显示为Student表指定的触发器已经插入成功。
Step4:插入新值
一旦功能和触发已成功生成,我们将插入一个新行的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;
输出
在执行上述命令时,触发器被执行并引发错误,表明奖学金提高不能那么高。
第五步:改变触发命令
为了解决上述错误,我们将使用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
输出
执行上述命令后,我们将得到以下输出:
Step3
我们现在将输入以下命令以查看与组织数据库中的表链接的所有触发器。
Organization=# dS Student
输出
执行上述命令后,我们将得到以下输出,其中显示了现有的触发器,即组织数据库中存在的Scholarship_before_update:
注意:在dS命令中,字母S是大写的,或者如果我们在字母s是小写的地方使用ds,则会出现以下错误:
更改触发器
在PostgreSQL 中,不包含OR REPLACE命令,它为我们提供了更改触发器解释的功能,如执行触发器时将实现的功能。
因此,我们可以将这些命令包装在一个事务中,也可以使用CREATE TRIGGER 和 DROP TRIGGER命令。
让我们看一个示例以了解DROP TRIGGER和CREATE TRIGGER命令如何在事务中工作。
下面的命令表示如何将Scholarship_before_update触发器的check_scholarship()函数更改为validate_scholarship:
步骤 1:开始交易
要开始交易,我们可以使用以下语句:
BEGIN;
输出
执行完上面的命令后,我们会得到下面的消息窗口,表示指定的命令已经成功执行。
Step2:使用DROP触发命令
成功启动交易流程后,我们将执行以下DROP TRIGGER命令:
DROP TRIGGER IF EXISTS scholarship_before_update
on Student;
输出
执行上述命令后,我们将得到以下输出,显示特定触发器已成功从Student表中删除。
Step3:创建一个新的触发器
在成功删除Scholarship_before_update 触发器后,我们创建一个具有相似名称的新触发器Scholarship_before_udpate,如下面的命令所示:
CREATE TRIGGER scholarship_before_udpate
BEFORE UPDATE
ON Student
FOR EACH ROW
EXECUTE PROCEDURE check_scholarship();
输出
执行上述命令后,我们将获得以下消息窗口,其中显示已成功为Student表插入特定触发器。
Step4:提交交易
为了使更改对其他会话(或用户)可见,我们需要在COMMIT命令的帮助下提交事务,如下所示:
COMMIT;
输出
执行完上面的命令后,我们会得到如下消息窗口,显示Student表的事务已经提交成功。
概述
在PostgreSQL ALTER Trigger部分,我们学习了以下主题:
- 为了重命名触发器,我们在示例中使用了PostgreSQL Alter Trigger 命令。
- 要使用新触发器更改触发器,我们使用了一对DROP TRIGGER 和 CREATE TRIGGER命令。
相关文章:
- [PostgreSQL教程]PostgreSQL教程-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL特性-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL版本-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL语法-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL创建数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL选择数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL删除/删除数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL创建表-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL删除/删除表-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL显示表-PostgreSQL教程|
相关推荐:
- [PostgreSQL教程]PostgreSQL与SQLite-PostgreSQL教程|
- [PostgreSQL教程]MongoDB与PostgreSQL-PostgreSQL教程|
- [PostgreSQL教程]psqlcommands-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLDate&TimeFunction-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLFunctions-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL禁用触发器-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL左连接-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLANDCondition-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL获取子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQL与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- PostgreSQL与SQLServer-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLEXCEPT-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- psqlcommands-PostgreSQL教程|
- PostgreSQLDate&TimeFunction-PostgreSQL教程|
- PostgreSQL删除触发器-PostgreSQL教程|
- PostgreSQLOrderby子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLAlias-PostgreSQL教程|
- PostgreSQLNot-NullConstraint-PostgreSQL教程|
- PostgreSQL与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|