PostgreSQL Declanșatoare: creați, enumerați și aruncați cu exemplu
⚡ Rezumat inteligent
PostgreSQL Declanșatoarele sunt funcții care rulează automat atunci când un eveniment INSERT, UPDATE sau DELETE se declanșează asupra unui tabel, permițând bazei de date să aplice reguli, să înregistreze modificările și să auditeze datele fără cod suplimentar al aplicației.

În ce este Trigger PostgreSQL?
A PostgreSQL trăgaci este o funcție care se declanșează automat atunci când are loc un eveniment în baza de date asupra unui obiect al bazei de date, de exemplu, un tabel. Exemple de evenimente în baza de date care pot activa un declanșator includ INSERT, UPDATE, DELETE etc. Mai mult, atunci când creați un declanșator pentru un tabel, declanșatorul va fi eliminat automat atunci când tabelul respectiv este șters.
Cum se utilizează Trigger în PostgreSQL?
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 singură dată pentru fiecare rând modificat de operație. De asemenea, un declanșator poate fi marcat cu operatorul FOR EACH STATEMENT în timpul creării sale. Acest declanșator va fi executat o singură dată pentru o anumită operație.
PostgreSQL Creați 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-name ON table-name [ -- Trigger logic ];
Numele declanșatorului este numele declanșatorului.
ÎNAINTE, DUPĂ și ÎNLOC DE sunt cuvinte cheie care determină când va fi invocat declanșatorul.
Numele evenimentului este numele evenimentului care va determina invocarea declanșatorului. Acesta poate fi INSERT, UPDATE, DELETE etc.
Numele tabelului este numele tabelului pe care urmează să fie creat declanșatorul.
Dacă declanșatorul urmează să fie creat pentru o operație INSERT, trebuie să adăugăm parametrul ON column-name.
Următoarea sintaxă demonstrează acest lucru:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Creare exemplu de declanșare
Vom folosi tabelul de prețuri de mai jos:
Preț:
Să creăm un alt tabel, Price_Audits, unde vom înregistra modificările făcute în tabelul Price:
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$ BEGIN INSERT 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 de rând și ora în care este creată înregistrarea.
Acum că avem funcția de declanșare, ar trebui să o legăm de tabelul nostru Price. Vom da declanșatorului numele price_trigger. Înainte de a fi creată 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 Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Să introducem o nouă înregistrare în tabelul de prețuri:
INSERT INTO Price VALUES (3, 400);
Acum că am introdus o înregistrare în tabelul Price, o altă înregistrare ar trebui introdusă și în tabelul Price_Audits, datorită declanșatorului pe care l-am creat. Să verificăm următoarele:
SELECT * FROM Price_Audits;
Aceasta va returna următoarele:
Declanșatorul a funcționat cu succes.
PostgreSQL Declanșator listă
Toate declanșatoarele în care creați PostgreSQL sunt stocate în tabelul pg_trigger. Pentru a vedea lista de declanșatoare pe care le aveți pe Baza de date, interogați tabelul rulând comanda SELECT așa cum se arată mai jos:
SELECT tgname FROM pg_trigger;
Aceasta returnează următoarele:
Coloana tgname a tabelului pg_trigger denotă numele declanșatorului.
PostgreSQL Declanșator de declanșare
Când un declanșator nu mai este necesar, îl puteți elimina la fel de ușor. Pentru a renunța la un PostgreSQL declanșator, folosim instrucțiunea DROP TRIGGER cu următoarea sintaxă:
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
Parametrul declanșator-name denotă numele declanșatorului care urmează să fie șters.
Numele tabelului denotă numele tabelului din care declanșatorul urmează să fie șters.
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ă aruncați automat toate obiectele care depind de declanșare.
Dacă utilizați opțiunea RESTRICT, declanșatorul nu va fi șters dacă obiectele depind de el.
De exemplu:
Pentru a arunca declanșatorul numit example_trigger pe tabelul Company, rulați următoarea comandă:
DROP TRIGGER example_trigger IF EXISTS
ON Company;
Folosind pgAdmin
Acum să vedem cum sunt efectuate toate cele trei acțiuni folosind pgAdmin.
Cum se creează declanșatorul în PostgreSQL folosind pgAdmin
Iată cum puteți crea un declanșator în PostgreSQL folosind pgAdmin:
Pasul 1) Conectați-vă la contul dvs. pgAdmin
Deschide pgAdmin și conectează-te la contul tău folosind datele de autentificare.
Pasul 2) Creați o bază de date demonstrativă
- Din bara de navigare din stânga, faceți clic pe Baze de date.
- Faceți clic pe Demo.
Pasul 3) Introduceți interogarea
Pentru a crea tabelul Price_Audits, introduceți interogarea în editor:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Pasul 4) Executați interogarea
Faceți clic pe butonul Execute.
Pasul 5) Rulați Code pentru auditfunc
Rulați următorul cod pentru a defini funcția 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
Pasul 6) Rulați Code pentru a crea un declanșator
Rulați următorul cod pentru a crea declanșatorul price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
Pasul 7) Introduceți o nouă înregistrare
- Rulați următoarea comandă pentru a insera o înregistrare nouă în tabelul de prețuri:
INSERT INTO Price VALUES (3, 400)
- Rulați următoarea comandă pentru a verifica dacă a fost introdusă o înregistrare în tabelul Price_Audits:
SELECT * FROM Price_Audits
Aceasta ar trebui să returneze următoarele:
Pasul 8) Verificați conținutul tabelului
Să verificăm conținutul tabelului Price_Audits.
Listarea declanșatorilor folosind pgAdmin
Pas 1) Rulați următoarea comandă pentru a verifica declanșatoarele din baza de date:
SELECT tgname FROM pg_trigger
Aceasta returnează următoarele:
Picăturăping Declanșatoare folosind pgAdmin
Pentru a arunca declanșatorul numit example_trigger pe tabelul Company, rulați următoarea comandă:
DROP TRIGGER example_trigger IF EXISTS
ON Company
Descărcați baza de date folosită în acest tutorial







