Ce sunt declanșatoarele Postgresql?
Un declanșator PostgreSQL este o funcție care este declanșată automat atunci când are loc un eveniment de bază de date pe un obiect de bază de date. De exemplu, un tabel.
Exemple de evenimente din baza de date care pot activa un declanșator includ INSERT, UPDATE, DELETE etc. În plus, atunci când creați un declanșator pentru o tabelă, declanșatorul va fi abandonat automat atunci când tabela respectivă este ștearsă.
În acest tutorial PostgreSQL, veți afla următoarele:
- Ce sunt declanșatoarele Postgresql?
- Cum a folosit Trigger în POSRGREQL?
- Crearea unui declanșator
- Folosind pgAdmin
- Declanșatoare de cădere
Cum a folosit Trigger în POSRGREQL?
Un declanșator poate fi marcat cu operatorul FOR EACH ROW în timpul creării sale. Un astfel de declanșator va fi apelat o dată pentru fiecare rând modificat de operație. Un declanșator poate fi, de asemenea, marcat cu operatorul PENTRU FIECARE DECLARAȚIE în timpul creării sale. Acest declanșator va fi executat o singură dată pentru o anumită operație.
Crearea unui declanșator
Pentru a crea un declanșator, folosim funcția CREATE TRIGGER. Iată sintaxa funcției:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];
Numele declanșatorului este numele declanșatorului.
Înainte, după și în loc de sunt cuvinte cheie care determină când va fi invocat declanșatorul.
Numele evenimentului este numele evenimentului care va determina apelarea declanșatorului. Aceasta poate fi INSERT, UPDATE, DELETE etc.
Numele tabelei este numele tabelei pe care urmează să fie creat declanșatorul.
Dacă declanșatorul urmează să fie creat pentru o operațiune INSERT, trebuie să adăugăm parametrul ON coloană-nume.
Următoarea sintaxă demonstrează acest lucru:
CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];
De exemplu:
Vom folosi tabelul de prețuri prezentat mai jos:
Preț:
Să creăm un alt tabel, Price_Audits, unde vom înregistra modificările aduse tabelului de prețuri:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL);
Acum putem defini o nouă funcție numită 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;
Funcția de mai sus va insera o înregistrare în tabelul Price_Audits, inclusiv noul id al rândului și momentul creării înregistrării.
Acum că avem funcția de declanșare, ar trebui să o legăm de tabelul nostru de prețuri. Vom da declanșatorului numele price_trigger. Înainte de a crea o nouă înregistrare, funcția de declanșare va fi invocată automat pentru a înregistra modificările. Iată declanșatorul:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Să introducem o nouă înregistrare în tabelul Prețuri:
INSERT INTO PriceVALUES (3, 400);
Acum, după ce am inserat o înregistrare în tabelul Prețuri, ar trebui inserată și o înregistrare în tabelul Preț_Audit. Acest lucru va fi ca rezultat al declanșatorului pe care l-am creat pe tabelul Prețuri. Să verificăm acest lucru:
SELECT * FROM Price_Audits;
Aceasta va returna următoarele:
Declanșatorul a funcționat cu succes.
Listări declanșatoare
Toate declanșatoarele pe care le creați în PostgreSQL sunt stocate în tabelul pg_trigger. Pentru a vedea lista declanșatoarelor pe care le aveți în baza de date, interogați tabelul executând comanda SELECT așa cum se arată mai jos:
SELECT tgname FROM pg_trigger;
Aceasta returnează următoarele:
Coloana tgname din tabelul pg_trigger denotă numele declanșatorului.
Declanșatoare de renunțare
Pentru a renunța la un declanșator PostgreSQL, folosim instrucțiunea DROP TRIGGER cu următoarea sintaxă:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
Parametrul trigger-name indică numele declanșatorului care urmează să fie șters.
Numele tabelului indică numele tabelului din care urmează să fie șters declanșatorul.
Clauza IF EXISTS încearcă să șteargă un declanșator care există. Dacă încercați să ștergeți un declanșator care nu există fără a utiliza clauza IF EXISTS, veți primi o eroare.
Opțiunea CASCADE vă va ajuta să renunțați automat la toate obiectele care depind de declanșator.
Dacă utilizați opțiunea RESTRICT, declanșatorul nu va fi șters dacă obiectele depind de aceasta.
De exemplu:
Pentru a șterge declanșatorul numit example_trigger pe tabelul Price, executăm următoarea comandă:
Pentru a fixa declanșatorul denumit example_trigger pe tabela Companie, rulați următoarea comandă:
DROP TRIGGER example_trigger IF EXISTSON Company;
Folosind pgAdmin
Acum să vedem cum s-au efectuat toate cele trei acțiuni folosind pgAdmin.
Crearea declanșatoarelor
Pentru a realiza același lucru prin pgAdmin, procedați astfel:
Pasul 1) Conectați-vă la contul dvs. pgAdmin.
Pasul 2)
- Din bara de navigare din stânga - Faceți clic pe Baze de date.
- Faceți clic pe Demo.
Pasul 3) Pentru a crea tabelul Price_Audits, tastați editorul de interogări:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
Pasul 4) Faceți clic pe butonul Executare.
Pasul 5) Rulați următorul cod pentru a defini funcția 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
Pasul 6) Rulați următorul cod pentru a crea declanșatorul price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Pasul 7)
- Rulați următoarea comandă pentru a insera o nouă înregistrare în tabelul de prețuri:
INSERT INTO PriceVALUES (3, 400)
- Rulați următoarea comandă pentru a verifica dacă a fost inserată o înregistrare în tabelul Price_Audits:
SELECT * FROM Price_Audits
Aceasta ar trebui să returneze următoarele:
Pasul 8) Să verificăm conținutul tabelului Price_Audits:
Listări declanșatoare
Pasul 1) Rulați următoarea comandă pentru a verifica declanșatoarele din baza de date:
SELECT tgname FROM pg_trigger
Aceasta returnează următoarele:
Declanșatoare de cădere
Pentru a fixa declanșatorul denumit example_trigger pe tabela Companie, rulați următoarea comandă:
DROP TRIGGER example_trigger IF EXISTSON Company
Rezumat:
- Un declanșator PostgreSQL se referă la o funcție care este declanșată automat atunci când apare un eveniment de bază de date pe un obiect de bază de date, cum ar fi un tabel.
- Exemple de astfel de evenimente din baza de date includ INSERT, UPDATE, DELETE etc.
- Un declanșator există numai pe durata de viață a obiectului bazei de date pentru care a fost creat.
- Dacă obiectul bazei de date este șters, declanșatorul va fi șters.
- Declanșatoarele PostgreSQL sunt create folosind instrucțiunea CREATE TRIGGER.
- Fiecare declanșator este asociat cu o funcție care indică ce va face declanșatorul atunci când este invocat.
Descărcați baza de date utilizată în acest tutorial