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 Приклад створення тригера

Ми будемо використовувати таблицю цін, наведену нижче:

Ціна:

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;

Це поверне наступне:

PostgreSQL створення тригера

Тригер спрацював успішно.

Тригер списку Postgres

Усі тригери, які ви створюєте PostgreSQL зберігаються в таблиці pg_trigger. Щоб переглянути список тригерів, які ви маєте на база даних, надішліть запит до таблиці, виконавши команду SELECT, як показано нижче:

SELECT tgname FROM pg_trigger;

Це повертає наступне:

Тригер списку Postgres

Стовпець 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) Створіть демонстраційну базу даних

  1. На панелі навігації ліворуч натисніть Бази даних.
  2. Натисніть Демо.

Створити тригер в PostgreSQL за допомогою pgAdmin

Крок 3) Введіть запит

Для створення таблиці Price_Audits в редакторі введіть запит:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

Крок 4) Виконайте запит

Натисніть кнопку Виконати

Створити тригер в PostgreSQL за допомогою pgAdmin

Крок 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) Вставте новий запис

  1. Виконайте таку команду, щоб вставити новий запис у таблицю цін:
    INSERT INTO Price
    VALUES (3, 400)
  2. Виконайте таку команду, щоб перевірити, чи було вставлено запис у таблицю Price_Audits:
    SELECT * FROM Price_Audits

    Це має повернути наступне:

Створити тригер в PostgreSQL за допомогою pgAdmin

Крок 8) Перевірте вміст таблиці

Перевіримо вміст таблиці Price_Audits:

Перелік тригерів за допомогою pgAdmin

Крок 1) Виконайте таку команду, щоб перевірити тригери у вашій базі даних:

SELECT tgname FROM pg_trigger

Це повертає наступне:

Перелік тригерів за допомогою pgAdmin

Видалення тригерів за допомогою pgAdmin

Щоб видалити тригер під назвою example_trigger у таблиці Company, виконайте таку команду:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Підсумки

  • A PostgreSQL trigger відноситься до функції, яка запускається автоматично, коли подія бази даних відбувається в об’єкті бази даних, наприклад таблиці.
  • Прикладами таких подій бази даних є INSERT, UPDATE, DELETE тощо.
  • Тригер існує лише протягом життя об’єкта бази даних, для якого його було створено.
  • Якщо об’єкт бази даних видалено, тригер також буде видалено.
  • PostgreSQL тригери створюються за допомогою оператора CREATE TRIGGER.
  • Кожен тригер пов’язаний із функцією, яка вказує, що тригер робитиме під час його виклику.

Завантажте базу даних, яка використовується в цьому посібнику