Що таке тригери Postgresql?
Тригер PostgreSQL - це функція, яка запускається автоматично, коли подія бази даних відбувається в об'єкті бази даних. Наприклад, стіл.
Приклади подій бази даних, які можуть активувати тригер, включають ВСТАВИТИ, ОНОВИТИ, ВИДАЛИТИ тощо. Крім того, коли ви створюєте тригер для таблиці, тригер буде автоматично скинутий, коли ця таблиця буде видалена.
У цьому посібнику PostgreSQL ви дізнаєтесь таке:
- Що таке тригери Postgresql?
- Як тригер використовується в POSRGREQL?
- Створення тригера
- Використання pgAdmin
- Зниження тригерів
Як тригер використовується в POSRGREQL?
Тригер може бути позначений оператором ДЛЯ КОЖНОГО РЯДКУ під час його створення. Такий тригер буде викликатися один раз для кожного рядка, модифікованого операцією. Тригер також може бути позначений оператором ДЛЯ КОЖНОЇ ЗАЯВИ під час його створення. Цей тригер буде виконаний лише один раз для певної операції.
Створення тригера
Для створення тригера ми використовуємо функцію 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.
Наступний синтаксис це демонструє:
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_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.
- Кожен тригер пов'язаний з функцією, яка вказує, що тригер буде робити при його виклику.
Завантажте базу даних, що використовується у цьому посібнику