PostgreSQL Declanșatoare: creați, enumerați și aruncați cu exemplu
În ce este Trigger PostgreSQL?
A PostgreSQL trăgaci este o funcție care este declanșată automat atunci când are loc un eveniment al bazei de date pe un obiect al bazei de date. De exemplu, o masă. Exemple de evenimente de bază 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 abandonat automat când acel tabel 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 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.
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 la tabelul nostru de prețuri. 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 inserat o înregistrare în tabelul Price, ar trebui să fie inserată și o înregistrare în tabelul Price_Audit. Acest lucru va fi ca rezultat al declanșatorului pe care l-am creat pe tabelul Preț. Să verificăm asta:
SELECT * FROM Price_Audits;
Aceasta va returna următoarele:
Declanșatorul a funcționat cu succes.
Postgres List Trigger
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.
Postgres Drop Trigger
A scăpa 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 șterge declanșatorul numit example_trigger pe table Price, rulăm următoarea comandă:
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 au fost 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 Postgres folosind pgAdmin:
Pasul 1) Conectați-vă la contul dvs. pgAdmin
Deschideți pgAdmin și conectați-vă la contul dvs. folosind datele de conectare
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 codul 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 codul pentru a crea declanșatorul
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:
Eliminarea declanșatorilor 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
Rezumat
- A PostgreSQL declanșatorul se referă la 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, cum ar fi un tabel.
- Exemple de astfel de evenimente ale bazei de date includ INSERT, UPDATE, DELETE etc.
- Un declanșator există doar 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 și el șters.
- PostgreSQL declanșatoarele 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 folosită în acest tutorial