PostgreSQL Триггеры: создание, список и удаление с примером
⚡ Умное резюме
PostgreSQL Триггеры — это функции, которые автоматически запускаются при возникновении событий INSERT, UPDATE или DELETE в таблице, позволяя базе данных обеспечивать соблюдение правил, регистрировать изменения и проводить аудит данных без дополнительного кода приложения.

Что такое триггер 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_Audits, поскольку мы создали триггер. Давайте проверим это:
SELECT * FROM Price_Audits;
Это вернет следующее:
Триггер сработал успешно.
PostgreSQL Список триггеров
Все триггеры, которые вы создаете в PostgreSQL хранятся в таблице pg_trigger. Чтобы просмотреть список триггеров, которые у вас есть на база данных, запросите таблицу, выполнив команду SELECT, как показано ниже:
SELECT tgname FROM pg_trigger;
Это возвращает следующее:
Столбец tgname таблицы pg_trigger обозначает имя триггера.
PostgreSQL Триггер сброса
Когда триггер больше не нужен, его можно так же легко удалить. Чтобы удалить PostgreSQL триггера, мы используем оператор DROP TRIGGER со следующим синтаксисом:
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
Параметр Trigger-Name обозначает имя триггера, который необходимо удалить.
Имя_таблицы обозначает имя таблицы, из которой нужно удалить триггер.
Предложение IF EXISTS пытается удалить существующий триггер. Если вы попытаетесь удалить несуществующий триггер без использования предложения IF EXISTS, вы получите сообщение об ошибке.
Опция CASCADE поможет вам автоматически удалить все объекты, зависящие от триггера.
Если вы используете опцию RESTRICT, триггер не будет удален, если от него зависят объекты.
Например:
Чтобы поместить триггер с именем example_trigger в таблицу Company, выполните следующую команду:
DROP TRIGGER example_trigger IF EXISTS
ON Company;
Использование pgAdmin
Теперь давайте посмотрим, как выполняются все три действия с помощью pgAdmin.
Как создать триггер в PostgreSQL используя pgAdmin
Вот как можно создать триггер в PostgreSQL используя pgAdmin:
Шаг 1) Войдите в свою учетную запись pgAdmin.
Откройте pgAdmin и войдите в свою учетную запись, используя свои учетные данные.
Шаг 2) Создайте демонстрационную базу данных
- На панели навигации слева нажмите «Базы данных».
- Нажмите Демо.
Шаг 3) Введите запрос
Для создания таблицы Price_Audits введите запрос в редакторе:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Шаг 4) Выполните запрос
Нажмите кнопку «Выполнить».
Шаг 5) Запустите Code для функции аудита
Запустите следующий код, чтобы определить функцию 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) Запустите Code создать триггер
Запустите следующий код, чтобы создать триггер 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
Это возвращает следующее:
Падениеping Триггеры с использованием pgAdmin
Чтобы поместить триггер с именем example_trigger в таблицу Company, выполните следующую команду:
DROP TRIGGER example_trigger IF EXISTS
ON Company
Загрузите базу данных, используемую в этом руководстве.







