PostgreSQL Тригери: Създаване, списък и пускане с пример
⚡ Умно обобщение
PostgreSQL Тригерите са функции, които се изпълняват автоматично, когато се задейства събитие INSERT, UPDATE или DELETE върху таблица, позволявайки на базата данни да прилага правила, да регистрира промени и да одитира данни без допълнителен код на приложението.

В какво е Trigger PostgreSQL?
A PostgreSQL Тригер е функция, която се задейства автоматично, когато възникне събитие в базата данни върху обект от базата данни, например таблица. Примери за събития в базата данни, които могат да активират тригер, включват INSERT, UPDATE, DELETE и др. Освен това, когато създавате тригер за таблица, той ще бъде премахнат автоматично, когато тази таблица бъде изтрита.
Как се използва Trigger в PostgreSQL?
Тригер може да бъде маркиран с оператора FOR EACH ROW по време на създаването си. Такъв тригер ще бъде извикан веднъж за всеки ред, модифициран от операцията. Тригер може също да бъде маркиран с оператора FOR EACH STATEMENT по време на създаването си. Този тригер ще бъде изпълнен само веднъж за конкретна операция.
PostgreSQL Създайте Trigger
За да създадем тригер, използваме функцията 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, където ще регистрираме промените, направени в таблицата с цени:
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();
Нека вмъкнем нов запис в ценовата таблица:
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
Изтеглете базата данни, използвана в този урок







