PostgreSQL Триггеры: создание, список и удаление с примером
Что такое триггер PostgreSQL?
A PostgreSQL Вызывать — это функция, которая запускается автоматически, когда событие базы данных происходит в объекте базы данных. Например, стол. Примеры событий базы данных, которые могут активировать триггер, включают INSERT, UPDATE, DELETE и т. д. Более того, когда вы создаете триггер для таблицы, триггер будет автоматически удален при удалении этой таблицы.
Как используется триггер PostgreSQL?
Триггер можно пометить оператором FOR EACH ROW во время его создания. Такой триггер будет вызываться один раз для каждой строки, измененной операцией. Триггер также можно пометить оператором FOR EACH STATEMENT во время его создания. Этот триггер будет выполнен только один раз для конкретной операции.
PostgreSQL Создание триггера
Для создания триггера мы используем функцию CREATE TRIGGER. Вот синтаксис функции:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
Имя триггера — это имя триггера.
BEFORE, AFTER и INSTEAD OF — это ключевые слова, которые определяют, когда будет вызван триггер.
Имя события — это имя события, которое вызовет вызов триггера. Это может быть ВСТАВИТЬ, ОБНОВЛЕНИЕ, УДАЛЕНИЕ и т. д.
Имя таблицы — это имя таблицы, для которой должен быть создан триггер.
Если триггер должен быть создан для операции INSERT, мы должны добавить параметр ON имя столбца.
Следующий синтаксис демонстрирует это:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Создать пример триггера
Мы будем использовать таблицу цен, приведенную ниже:
Цена:
Давайте создадим еще одну таблицу Price_Audits, в которой будем регистрировать изменения, внесенные в таблицу цен:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Теперь мы можем определить новую функцию с именем Auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql;
Вышеупомянутая функция вставит запись в таблицу Price_Audits, включая новый идентификатор строки и время создания записи.
Теперь, когда у нас есть триггерная функция, нам следует привязать ее к нашей таблице цен. Мы дадим триггеру имя Price_trigger. Перед созданием новой записи автоматически вызывается триггерная функция для регистрации изменений. Вот триггер:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Вставим новую запись в таблицу Price:
INSERT INTO Price VALUES (3, 400);
Теперь, когда мы вставили запись в таблицу Price, ее следует также вставить в таблицу Price_Audit. Это будет результатом триггера, который мы создали в таблице цен. Давайте проверим это:
SELECT * FROM Price_Audits;
Это вернет следующее:
Триггер сработал успешно.
Триггер списка Postgres
Все триггеры, которые вы создаете в PostgreSQL хранятся в таблице pg_trigger. Чтобы просмотреть список триггеров, которые у вас есть на база данных, запросите таблицу, выполнив команду SELECT, как показано ниже:
SELECT tgname FROM pg_trigger;
Это возвращает следующее:
Столбец tgname таблицы pg_trigger обозначает имя триггера.
Триггер удаления Postgres
Чтобы оставить PostgreSQL триггера, мы используем оператор DROP TRIGGER со следующим синтаксисом:
DROP TRIGGER [IF EXISTS] trigger-name ON table-name [ CASCADE | RESTRICT ];
Параметр Trigger-Name обозначает имя триггера, который необходимо удалить.
Имя_таблицы обозначает имя таблицы, из которой нужно удалить триггер.
Предложение IF EXISTS пытается удалить существующий триггер. Если вы попытаетесь удалить несуществующий триггер без использования предложения IF EXISTS, вы получите сообщение об ошибке.
Опция CASCADE поможет вам автоматически удалить все объекты, зависящие от триггера.
Если вы используете опцию RESTRICT, триггер не будет удален, если от него зависят объекты.
Например:
Чтобы удалить триггер с именем example_trigger в таблице Price, мы запускаем следующую команду:
Чтобы поместить триггер с именем example_trigger в таблицу Company, выполните следующую команду:
DROP TRIGGER example_trigger IF EXISTS ON Company;
Использование pgAdmin
Теперь посмотрим, как все три действия выполняются с помощью pgAdmin.
Как создать триггер в PostgreSQL используя pgAdmin
Вот как вы можете создать триггер в Postgres с помощью pgAdmin:
Шаг 1) Войдите в свою учетную запись pgAdmin.
Откройте pgAdmin и войдите в свою учетную запись, используя свои учетные данные.
Шаг 2) Создайте демонстрационную базу данных
- На панели навигации слева нажмите «Базы данных».
- Нажмите Демо.
Шаг 3) Введите запрос
Чтобы создать таблицу Price_Audits, введите в редакторе запрос:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Шаг 4) Выполните запрос
Нажмите кнопку «Выполнить»
Шаг 5) Запустите код функции аудита.
Запустите следующий код, чтобы определить функцию Auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql
Шаг 6) Запустите код, чтобы создать триггер.
Запустите следующий код, чтобы создать триггер Price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
Шаг 7) Вставьте новую запись
- Выполните следующую команду, чтобы вставить новую запись в таблицу цен:
INSERT INTO Price VALUES (3, 400)
- Выполните следующую команду, чтобы проверить, была ли вставлена запись в таблицу Price_Audits:
SELECT * FROM Price_Audits
Это должно вернуть следующее:
Шаг 8) Проверьте содержимое таблицы
Проверим содержимое таблицы Price_Audits:
Листинг триггеров с помощью pgAdmin
Шаг 1) Запустите следующую команду, чтобы проверить триггеры в вашей базе данных:
SELECT tgname FROM pg_trigger
Это возвращает следующее:
Удаление триггеров с помощью pgAdmin
Чтобы поместить триггер с именем example_trigger в таблицу Company, выполните следующую команду:
DROP TRIGGER example_trigger IF EXISTS ON Company
Резюме
- A PostgreSQL Триггер относится к функции, которая запускается автоматически, когда событие базы данных происходит в объекте базы данных, например в таблице.
- Примеры таких событий базы данных: INSERT, UPDATE, DELETE и т. д.
- Триггер существует только во время существования объекта базы данных, для которого он был создан.
- Если объект базы данных будет удален, триггер также будет удален.
- PostgreSQL триггеры создаются с помощью оператора CREATE TRIGGER.
- Каждый триггер связан с функцией, определяющей, что будет делать триггер при его вызове.
Загрузите базу данных, используемую в этом руководстве.