📜  PostgreSQL – 禁用触发器

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

PostgreSQL – 禁用触发器

在 PostgreSQL 中,没有用于禁用现有触发器的特定语句,例如DISABLE TRIGGER 。但是,可以使用ALTER TABLE语句禁用触发器,如下所示:

Syntax: 
ALTER TABLE table_name
DISABLE TRIGGER trigger_name | ALL

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

  • 首先,DISABLE TRIGGER关键字之后指定要禁用的触发器的名称
  • 要禁用与表关联的所有触发器,请使用ALL而不是特定的触发器名称。

例子:

首先我们使用以下语句创建一个员工表进行演示:

CREATE TABLE staff(
    user_id serial PRIMARY KEY,
    username VARCHAR (50) UNIQUE NOT NULL,
    password VARCHAR (50) NOT NULL,
    email VARCHAR (355) UNIQUE NOT NULL,
    created_on TIMESTAMP NOT NULL,
    last_login TIMESTAMP
);


其次,创建一个验证员工用户名的函数。工作人员的用户名不能为空,长度至少为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();

现在我们可以使用以下语句禁用username_check触发:

ALTER TABLE staff
DISABLE TRIGGER username_check;

输出: