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, ОНОВИТИ, ВИДАЛИТИ тощо.
Ім'я таблиці - це ім'я таблиці, на якій буде створено тригер.
Якщо тригер потрібно створити для операції INSERT, ми повинні додати параметр імені стовпця ON.
Наступний синтаксис демонструє це:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Приклад створення тригера
Ми будемо використовувати таблицю цін, наведену нижче:
Ціна:
Давайте створимо іншу таблицю 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$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql;
Наведена вище функція вставить запис у таблицю Price_Audits, включаючи ідентифікатор нового рядка та час створення запису.
Тепер, коли у нас є функція-тригер, нам слід прив’язати її до нашої таблиці Price. Ми надамо тригеру ім’я 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
Завантажте базу даних, яка використовується в цьому посібнику








