PostgreSQL Тригери: Създаване, списък и пускане с пример
В какво е 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_trigger. Преди да бъде създаден нов запис, функцията за задействане ще бъде извикана автоматично, за да регистрира промените. Ето тригера:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Нека вмъкнем нов запис в ценовата таблица:
INSERT INTO Price VALUES (3, 400);
Сега, след като сме вмъкнали запис в таблицата Price, запис трябва да бъде вмъкнат и в таблицата Price_Audit. Това ще бъде в резултат на тригера, който създадохме в таблицата с цените. Нека проверим това:
SELECT * FROM Price_Audits;
Това ще върне следното:
Тригерът работи успешно.
Тригер за списък на Postgres
Всички тригери, в които създавате PostgreSQL се съхраняват в таблицата pg_trigger. За да видите списъка с тригери, които имате на база данни, потърсете таблицата, като изпълните командата SELECT, както е показано по-долу:
SELECT tgname FROM pg_trigger;
Това връща следното:
Колоната tgname на таблицата pg_trigger обозначава името на тригера.
Postgres Drop Trigger
За да изпуснете 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
Oбобщение
- A PostgreSQL trigger се отнася до функция, която се задейства автоматично, когато възникне събитие в базата данни върху обект на база данни, като например таблица.
- Примери за такива събития в базата данни включват INSERT, UPDATE, DELETE и др.
- Тригерът съществува само по време на живота на обекта на базата данни, за който е създаден.
- Ако обектът на базата данни бъде изтрит, тригерът също ще бъде изтрит.
- PostgreSQL тригерите се създават с помощта на оператора CREATE TRIGGER.
- Всеки тригер е свързан с функция, която посочва какво ще направи тригерът, когато бъде извикан.
Изтеглете базата данни, използвана в този урок