Какво представляват тригерите на Postgresql?
Задействането на PostgreSQL е функция, която се задейства автоматично, когато възникне събитие на база данни на обект на база данни. Например таблица.
Примерите за събития в базата данни, които могат да активират задействане, включват INSERT, UPDATE, DELETE и др. Освен това, когато създавате задействане за таблица, задействането автоматично ще отпадне, когато тази таблица бъде изтрита.
В този урок за PostgreSQL ще научите следното:
- Какво представляват тригерите на Postgresql?
- Как се използва Trigger в POSRGREQL?
- Създаване на тригер
- Използване на pgAdmin
- Отпадащи тригери
Как се използва Trigger в POSRGREQL?
Спусък може да бъде маркиран с оператора ЗА ВСЕКИ РЕД по време на създаването му. Такъв тригер ще бъде извикан веднъж за всеки ред, модифициран от операцията. По време на създаването му може да се маркира и спусък с оператора FOR EACH STATEMENT. Този тригер ще бъде изпълнен само веднъж за конкретна операция.
Създаване на тригер
За да създадем тригер, използваме функцията 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, ще получите грешка.
Опцията CASCADE ще ви помогне да изпуснете автоматично всички обекти, които зависят от задействането.
Ако използвате опцията 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) Изпълнете следния код, за да създадете задействащ цена_задействане:
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.
- Всеки тригер е свързан с функция, указваща какво ще прави спусъка, когато бъде извикан.
Изтеглете базата данни, използвана в този урок