PostgreSQL - Отключение триггера
В 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;
Выход: