Skip to content

Триггеры в 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.

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.