PostgreSQL - Отключение триггера

Опубликовано: 30 Марта, 2022

В PostgreSQL нет специального оператора, такого как DISABLE TRIGGER, для отключения существующего триггера. Однако можно отключить триггер с помощью оператора ALTER TABLE следующим образом:

 Синтаксис:
ALTER TABLE имя_таблицы
ОТКЛЮЧИТЬ ТРИГГЕР имя-триггера | ВСЕ

Давайте проанализируем приведенный выше синтаксис:

  • Сначала вы указываете имя триггера, который хотите отключить, после ключевых слов DISABLE TRIGGER.
  • Чтобы отключить все триггеры, связанные с таблицей, вы используете ВСЕ вместо конкретного имени триггера.

Пример:

Сначала мы создаем таблицу сотрудников для демонстрации с помощью следующего утверждения:

 СОЗДАТЬ ТАБЛИЦУ персонал (
    user_id серийный ПЕРВИЧНЫЙ КЛЮЧ,
    имя пользователя VARCHAR (50) UNIQUE NOT NULL,
    пароль VARCHAR (50) NOT NULL,
    электронная почта 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;



В-третьих, создайте новый триггер в таблице персонала, чтобы проверить имя пользователя персонала. Этот триггер срабатывает всякий раз, когда вы вставляете или обновляете строку в таблице персонала.

 СОЗДАТЬ ТРИГГЕР username_check 
    ПЕРЕД ВСТАВКОЙ ИЛИ ОБНОВЛЕНИЕМ
ON персонал
ДЛЯ КАЖДОЙ РЯДЫ 
    ВЫПОЛНИТЬ ПРОЦЕДУРУ check_staff_user ();

Теперь мы можем отключить запускаемый username_check , используя следующую инструкцию:

 ALTER TABLE персонал
ОТКЛЮЧИТЬ ТРИГГЕР username_check;

Выход: