Что такое триггеры Postgresql?
Триггер PostgreSQL - это функция, которая запускается автоматически, когда событие базы данных происходит в объекте базы данных. Например, стол.
Примеры событий базы данных, которые могут активировать триггер, включают INSERT, UPDATE, DELETE и т. Д. Более того, когда вы создаете триггер для таблицы, триггер будет автоматически отброшен при удалении этой таблицы.
В этом руководстве по PostgreSQL вы узнаете следующее:
- Что такое триггеры Postgresql?
- Как триггер используется в POSRGREQL?
- Создание триггера
- Использование pgAdmin
- Отбрасывание триггеров
Как триггер используется в POSRGREQL?
Триггер можно пометить оператором FOR EACH ROW во время его создания. Такой триггер будет вызываться один раз для каждой строки, измененной операцией. Триггер также можно пометить оператором FOR EACH STATEMENT во время его создания. Этот триггер будет выполнен только один раз для конкретной операции.
Создание триггера
Для создания триггера мы используем функцию CREATE TRIGGER. Вот синтаксис функции:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];
Имя-триггера - это имя триггера.
Ключевые слова BEFORE, AFTER и INSTEAD OF определяют, когда будет активирован триггер.
Имя-события - это имя события, которое вызовет срабатывание триггера. Это может быть INSERT, UPDATE, DELETE и т. Д.
Имя-таблицы - это имя таблицы, для которой должен быть создан триггер.
Если триггер должен быть создан для операции INSERT, мы должны добавить параметр ON column-name.
Следующий синтаксис демонстрирует это:
CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];
Например:
Воспользуемся таблицей цен, приведенной ниже:
Цена:
Давайте создадим еще одну таблицу Price_Audits, в которой мы будем регистрировать изменения, внесенные в таблицу Price:
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$BEGININSERT 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 PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Вставим новую запись в таблицу цен:
INSERT INTO PriceVALUES (3, 400);
Теперь, когда мы вставили запись в таблицу Price, запись также должна быть вставлена в таблицу Price_Audit. Это будет результатом триггера, который мы создали в таблице цен. Давайте проверим это:
SELECT * FROM Price_Audits;
Это вернет следующее:
Спусковой крючок сработал успешно.
Листинг триггеров
Все триггеры, которые вы создаете в PostgreSQL, хранятся в таблице pg_trigger. Чтобы увидеть список триггеров, имеющихся в базе данных, запросите таблицу, выполнив команду SELECT, как показано ниже:
SELECT tgname FROM pg_trigger;
Это возвращает следующее:
Столбец tgname таблицы pg_trigger обозначает имя триггера.
Отбрасывание триггеров
Чтобы отбросить триггер PostgreSQL, мы используем оператор DROP TRIGGER со следующим синтаксисом:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
Параметр имя-триггера обозначает имя удаляемого триггера.
Имя-таблицы обозначает имя таблицы, из которой должен быть удален триггер.
Предложение IF EXISTS пытается удалить существующий триггер. Если вы попытаетесь удалить триггер, который не существует, без использования предложения IF EXISTS, вы получите сообщение об ошибке.
Опция КАСКАД поможет вам автоматически отбросить все объекты, зависящие от триггера.
Если вы используете опцию RESTRICT, триггер не будет удален, если объекты зависят от него.
Например:
Чтобы удалить триггер с именем example_trigger в таблице Price, мы запускаем следующую команду:
Чтобы поместить триггер с именем example_trigger в таблицу Company, выполните следующую команду:
DROP TRIGGER example_trigger IF EXISTSON Company;
Использование pgAdmin
Теперь посмотрим, как выполняются все три действия с помощью pgAdmin.
Создание триггеров
Чтобы сделать то же самое с помощью pgAdmin, сделайте следующее:
Шаг 1) Войдите в свою учетную запись 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$BEGININSERT 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 PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Шаг 7)
- Выполните следующую команду, чтобы вставить новую запись в таблицу цен:
INSERT INTO PriceVALUES (3, 400)
- Выполните следующую команду, чтобы проверить, была ли запись вставлена в таблицу Price_Audits:
SELECT * FROM Price_Audits
Это должно вернуть следующее:
Шаг 8) Давайте проверим содержимое таблицы Price_Audits:
Листинг триггеров
Шаг 1) Выполните следующую команду, чтобы проверить триггеры в вашей базе данных:
SELECT tgname FROM pg_trigger
Это возвращает следующее:
Отбрасывание триггеров
Чтобы поместить триггер с именем example_trigger в таблицу Company, выполните следующую команду:
DROP TRIGGER example_trigger IF EXISTSON Company
Резюме:
- Триггер PostgreSQL относится к функции, которая запускается автоматически, когда событие базы данных происходит в объекте базы данных, таком как таблица.
- Примеры таких событий базы данных включают INSERT, UPDATE, DELETE и т. Д.
- Триггер существует только в течение времени существования объекта базы данных, для которого он был создан.
- Если объект базы данных удален, триггер также будет удален.
- Триггеры PostgreSQL создаются с помощью оператора CREATE TRIGGER.
- Каждый триггер связан с функцией, указывающей, что триггер будет делать при его вызове.
Загрузите базу данных, используемую в этом руководстве