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 Пример за създаване на тригер

Ще използваме таблицата с цените, дадена по-долу:

Цена:

PostgreSQL Създайте Trigger

Нека създадем друга таблица, 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;

Това ще върне следното:

PostgreSQL Създайте Trigger

Тригерът работи успешно.

Тригер за списък на Postgres

Всички тригери, в които създавате PostgreSQL се съхраняват в таблицата pg_trigger. За да видите списъка с тригери, които имате на база данни, потърсете таблицата, като изпълните командата SELECT, както е показано по-долу:

SELECT tgname FROM pg_trigger;

Това връща следното:

Тригер за списък на Postgres

Колоната 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) Създайте демонстрационна база данни

  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

Oбобщение

  • A PostgreSQL trigger се отнася до функция, която се задейства автоматично, когато възникне събитие в базата данни върху обект на база данни, като например таблица.
  • Примери за такива събития в базата данни включват INSERT, UPDATE, DELETE и др.
  • Тригерът съществува само по време на живота на обекта на базата данни, за който е създаден.
  • Ако обектът на базата данни бъде изтрит, тригерът също ще бъде изтрит.
  • PostgreSQL тригерите се създават с помощта на оператора CREATE TRIGGER.
  • Всеки тригер е свързан с функция, която посочва какво ще направи тригерът, когато бъде извикан.

Изтеглете базата данни, използвана в този урок