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, ОНОВИТИ, ВИДАЛИТИ тощо.
Ім'я таблиці - це ім'я таблиці, на якій буде створено тригер.
Якщо тригер потрібно створити для операції 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_Audit. Це буде результатом тригера, який ми створили в таблиці Price. Давайте перевіримо це:
SELECT * FROM Price_Audits;
Це поверне наступне:
Тригер спрацював успішно.
Тригер списку Postgres
Усі тригери, які ви створюєте PostgreSQL зберігаються в таблиці pg_trigger. Щоб переглянути список тригерів, які ви маєте на база даних, надішліть запит до таблиці, виконавши команду SELECT, як показано нижче:
SELECT tgname FROM pg_trigger;
Це повертає наступне:
Стовпець tgname таблиці pg_trigger позначає назву тригера.
Тригер Postgres Drop
To drop a 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
Запустіть такий код, щоб визначити функцію 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 trigger відноситься до функції, яка запускається автоматично, коли подія бази даних відбувається в об’єкті бази даних, наприклад таблиці.
- Прикладами таких подій бази даних є INSERT, UPDATE, DELETE тощо.
- Тригер існує лише протягом життя об’єкта бази даних, для якого його було створено.
- Якщо об’єкт бази даних видалено, тригер також буде видалено.
- PostgreSQL тригери створюються за допомогою оператора CREATE TRIGGER.
- Кожен тригер пов’язаний із функцією, яка вказує, що тригер робитиме під час його виклику.
Завантажте базу даних, яка використовується в цьому посібнику