PostgreSQL 更改触发器
在本教程中,您将学习如何使用 PostgreSQL ALTER TRIGGER 语句重命名触发器。
摘要:在本教程中,您将学习如何使用 PostgreSQL ALTER TRIGGER 语句重命名触发器。
PostgreSQL ALTER TRIGGER 语句介绍
该 ALTER TRIGGER 语句允许您重命名触发器。下面显示了该 ALTER TRIGGER 语句的语法:
ALTER TRIGGER trigger_name
ON table_name
RENAME TO new_trigger_name;
在这个语法中:
- 首先,在
ALTER TRIGGER关键字后指定要重命名的触发器的名称。 - 其次,在
ON关键字后指定与触发器关联的表的名称。 - 第三,在
RENAME TO关键字后指定触发器的新名称。
PostgreSQL ALTER TRIGGER 示例
DROP TABLE IF EXISTS employees;
CREATE TABLE employees(
employee_id INT GENERATED ALWAYS AS IDENTITY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
salary decimal(11,2) not null default 0,
PRIMARY KEY(employee_id)
);
其次,创建一个函数,如果新薪水比旧薪水高 100%,则会引发异常:
CREATE OR REPLACE FUNCTION check_salary()
RETURNS TRIGGER
LANGUAGE PLPGSQL
AS
$$ BEGIN
IF (NEW.salary - OLD.salary) / OLD.salary >= 1 THEN
RAISE 'The salary increment cannot that high.';
END IF;
RETURN NEW;
END;
$$
第三,创建一个 before update 触发器, check_salary() 在更新工资之前执行函数。
CREATE TRIGGER before_update_salary
BEFORE UPDATE
ON employees
FOR EACH ROW
EXECUTE PROCEDURE check_salary();
四、在表中插入一个新行 employees :
INSERT INTO employees(first_name, last_name, salary)
VALUES('John','Doe',100000);
五、更新员工id为1的工资:
UPDATE employees
SET salary = 200000
WHERE employee_id = 1;
触发器被触发并发出以下错误:
ERROR: The salary increment cannot that high.
CONTEXT: PL/pgSQL function check_salary() line 4 at RAISE
SQL state: P0001
它按预期工作。
最后,使用该 ALTER TRIGGER 语句将 before_update_salary 触发器重命名为 salary_before_update :
ALTER TRIGGER before_update_salary
ON employees
RENAME TO salary_before_update;
如果使用 psql 工具,则可以使用以下 \dS 命令查看与表关联的所有触发器:
\dS employees
请注意,字母 S 是大写的。

更换触发器
PostgreSQL 不支持 OR REPLACE 允许您修改触发器定义的语句,例如触发触发器时将执行的函数。
为此,您可以使用 DROP TRIGGER and CREATE TRIGGER 语句。您还可以将这些语句包装在一个事务中。
以下示例说明如何 check_salary 将 salary_before_update 触发器的功能更改为 validate_salary :
BEGIN;
DROP TRIGGER IF EXISTS salary_before_update;
CREATE TRIGGER salary_before_udpate
BEFORE UPDATE
ON employees
FOR EACH ROW
EXECUTE PROCEDURE validate_salary();
COMMIT;
概括
- 使用该
ALTER TRIGGER语句重命名触发器。 - 使用
DROP TRIGGERandCREATE TRIGGER语句对将触发器替换为新触发器。