📜  PostgreSQL – 删除触发器

📅  最后修改于: 2022-05-13 01:57:14.981000             🧑  作者: Mango

PostgreSQL – 删除触发器

PostgreSQL,DROP TRIGGER 语句用于从表中删除触发器。

Syntax:
DROP TRIGGER [IF EXISTS] trigger_name 
ON table_name [ CASCADE | RESTRICT ];

我们来分析一下上面的语法:

  • 首先,在DROP TRIGGER关键字后指定要删除的触发器的名称
  • 其次,使用IF EXISTS仅在触发器存在时有条件地删除触发器。尝试删除不存在的触发器而不指定IF EXISTS语句会导致错误。如果您使用IF EXISTS删除不存在的触发器,PostgreSQL 会发出通知。
  • 第三,指定触发器所属的表名。如果表属于特定模式,则可以使用表的模式限定名称。
  • 第四,如果要自动删除依赖于触发器的对象,请使用CASCADE选项。请注意, CASCADE选项还将删除依赖于触发器的对象的对象。
  • 第五,如果有任何对象依赖它,使用RESTRICT TO 拒绝丢弃触发器。默认情况下, DROP TRIGGER语句使用RESTRICT

例子:

首先,创建一个函数来验证员工的用户名。工作人员的用户名不能为空,长度至少为8。

CREATE FUNCTION check_staff_user()
    RETURNS TRIGGER
AS $$
BEGIN
    IF length(NEW.username) < 8 OR NEW.username IS NULL THEN
        RAISE EXCEPTION 'The username cannot be less than 8 characters';
    END IF;
    IF NEW.NAME IS NULL THEN
        RAISE EXCEPTION 'Username cannot be NULL';
    END IF;
    RETURN NEW;
END;
$$
LANGUAGE plpgsql;

其次,在员工表上创建一个新的触发器来检查员工的用户名。每当您在人员表中插入或更新行时,都会触发此触发器



CREATE TRIGGER username_check 
    BEFORE INSERT OR UPDATE
ON staff
FOR EACH ROW 
    EXECUTE PROCEDURE check_staff_user();

这将导致以下触发器创建:

三、使用DROP TRIGGER语句删除username_check触发器:

DROP TRIGGER username_check
ON staff;

输出: