Триггеры в PostgreSQL: часть 2
Пересказ статьи Shivayan Mukherjee. PostgreSQL Triggers Part 2
Обзор статьи
В этой статье мы узнаем, как удалять, изменять, включать и выключать триггер в PostgreSQL. В первой части этой серии был сделан общий обзор триггеров базы данных, специфики триггеров в PostgreSQL, типов триггеров PostgreSQL и того, как создать триггер в базовом синтаксисе на примерах. Если вы пропустили эту статью, вот ссылка на нее.
Удаление триггера в PostgreSQL
Команда Drop Trigger используется для удаления существующего триггера из базы данных. Триггер можно удалить либо с помощью PgAdmin GUI, либо с помощью запросов в оболочке PSql, либо в редакторе запросов PgAdmin, как показано ниже:
Из этого меню можно использовать вариант Delete/Drop для удаления только этого триггера или вариант Drop Cascade для удаления всех связанных объектов одновременно. Например, в данном примере имеется одна триггерная функция, связанная с этим триггером, которая тоже будет удалена.
Базовый синтаксис
DROP TRIGGER [IF EXISTS] trigger_name
ON table_name [ CASCADE | RESTRICT ];
Здесь trigger_name - имя триггера, который должен удаляться, указывается после предложения DROP TRIGGER [IF EXISTS]. Предложение IF EXISTS используется, чтобы избежать необязательных ошибок, которые могут возникнуть в результате попытки удалить несуществующий триггер. Затем указывается имя таблицы (table_name), на которой срабатывает триггер, с последующим условием CASCADE или RESTRICT. CASCADE используется для удаления всех объектов, связанных с триггером. RESTRICT препятствует удалению связанных объектов и используется по умолчанию.
Давайте удалим триггер, который мы создали в первой части этого руководства.
DROP TRIGGER IF EXISTS stocks_trigger
ON public."Stocks" CASCADE;
Сначала давайте проверим триггер:
Теперь удалим триггер и снова проверим
Изменение триггера в PostgreSQL
Предложение Alter Trigger используется для модификации свойств триггера, как показано ниже. Мы рассмотрим переименование триггера и использование триггера с расширением.
Для переименования триггера используется такой синтаксис:
ALTER TRIGGER trigger_name
ON table_name
RENAME TO new_trigger_name;
Синтаксис довольно понятен. За предложением ALTER TRIGGER следует старое имя триггера, затем имя таблицы, и новое имя триггера идет после предложения RENAME TO.
Давайте рассмотрим пример переименования триггера
ALTER TRIGGER stocks_trigger
ON public."Stocks"
RENAME TO stocks_trigger_new;
Мы можем также пометить триггер зависимым от расширения. Расширение используется для привязки нескольких объектов SQL всех вместе к одному пакету, который может загружаться или удаляться из базы данных. Как только расширение загружено в базу данных, оно может функционировать как встроенная функция. Расширение(я) можно получить из коробки, а также они могут создаваться в последующем.
Чтобы пометить триггер зависимым от расширения, используется следующий синтаксис:
ALTER TRIGGER trigger_name ON table_name [ NO ] DEPENDS ON EXTENSION extension_name
Здесь за предложением ALTER TRIGGER указывается имя триггера. Затем за указанием соответствующего имени таблицы (table_name) следует предложение DEPENDS ON EXTENSION и имя расширения (extension_name).
В этом примере мы будем использовать встроенное расширение PostgreSQL, plpgsql, которое показано ниже:
ALTER TRIGGER stocks_trigger_new ON public."Stocks" DEPENDS ON EXTENSION plpgsql;
Включение/отключение триггера
Предложение Enable/Disable Trigger работает в сочетании с командой Alter Table. Они используются для включения/выключения триггера или всех триггеров, связанных с таблицей.
Базовый синтаксис:
ALTER TABLE table_name
ENABLE/DISABLE TRIGGER trigger_name | ALL;
Пример 1 - Давайте выключим триггер, который мы использовали в нашей последней сессии:
ALTER TABLE public."Stocks"
DISABLE TRIGGER stocks_trigger_new;
Можно также отключить триггер с помощью pdAdmin, как показано ниже:
Выключение триггера не удаляет его. Триггер по-прежнему существует, но находится в спящем состоянии. При выключении триггера он помечается красным крестиком в pgAdmin, как показано ниже:
Для проверки, что триггер отключен и больше не срабатывает, давайте вставим одну строку данных в таблицу "Stocks", и посмотрим, добавились ли данные аудита в другую таблицу "stocks_audit", как объяснялось в первой части этого руководства.
INSERT INTO public."Stocks"
VALUES (2,140,'Netflix');
Здесь мы видим, что нет данных, соответствующих 'id 2' в таблице stocks_audit, это доказывает, что триггер не отработал при вставке в таблицу 1.
Пример 2 - Давайте снова включим триггер и вставим одну строку данных в таблицу Stocks для проверки его функциональности.
ALTER TABLE public."Stocks"
ENABLE TRIGGER stocks_trigger_new;
Триггер можно также включить в PgAdmin, как показано ниже:
Теперь давайте вставим одну строку данных и снова проверим функциональность.
INSERT INTO public."Stocks"
VALUES (3,75000,'MRF');
Теперь мы видим данные, соответствующие 'id 3' в таблице stocks_audit, это доказывает активность триггера и то, что он успешно сработал при вставке в таблицу 1.
Заключение
В этой статье был представлен обзор различных операторов DDL, которые можно выполнять с триггером, и то, как их выполнить в PgAdmin, а также в консоли Psql.
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой