PostgreSQL Päästikud: looge, loetlege ja kukutage näitega
⚡ Nutikas kokkuvõte
PostgreSQL Päästikud on funktsioonid, mis käivituvad automaatselt, kui tabelis käivitub sündmus INSERT, UPDATE või DELETE, võimaldades andmebaasil reegleid jõustada, muudatusi logida ja andmeid auditeerida ilma täiendava rakenduskoodita.

Mis on Trigger sees PostgreSQL?
A PostgreSQL Trigger on funktsioon, mis käivitatakse automaatselt, kui andmebaasisündmus toimub andmebaasiobjektil, näiteks tabelil. Päästiku aktiveerimiseks sobivad näiteks järgmised andmebaasisündmused: INSERT, UPDATE, DELETE jne. Lisaks, kui loote tabeli jaoks päästiku, siis see kustutatakse tabeli kustutamisel automaatselt.
Kuidas Triggerit kasutatakse PostgreSQL?
Päästiku saab loomise ajal märkida operaatoriga FOR EACH ROW. Sellist päästikut kutsutakse iga toimingu poolt muudetud rea kohta üks kord välja. Päästiku saab loomise ajal märkida ka operaatoriga FOR EACH STATEMENT. Seda päästikut käivitatakse konkreetse toimingu jaoks ainult üks kord.
PostgreSQL Loo Trigger
Päästiku loomiseks kasutame funktsiooni CREATE TRIGGER. Siin on funktsiooni süntaks:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
Päästiku nimi on päästiku nimi.
ENNE, PÄRAST ja INSTEEAD OF on märksõnad, mis määravad, millal päästik käivitatakse.
Sündmuse nimi on selle sündmuse nimi, mis käivitab päästiku. See võib olla INSERT, VÄRSKENDAMINE, KUSTUTAMINE jne.
Tabeli nimi on selle tabeli nimi, millel käivitaja luuakse.
Kui päästik luuakse toimingu INSERT jaoks, peame lisama parameetri ON veeru nimi.
Seda näitab järgmine süntaks:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Loo käivitaja näide
Kasutame allpool toodud hinnatabelit:
Hind:
Loome teise tabeli Price_Audits, kuhu logime hinnatabelis tehtud muudatused:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Nüüd saame määratleda uue funktsiooni nimega 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;
Ülaltoodud funktsioon lisab tabelisse Price_Audits kirje, sealhulgas uue rea ID ja kirje loomise aja.
Nüüd, kui meil on päästikfunktsioon olemas, peaksime selle siduma oma hinnatabeliga. Anname päästikule nimeks price_trigger. Enne uue kirje loomist kutsutakse päästikfunktsioon muudatuste logimiseks automaatselt välja. Siin on päästik:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Sisestame hinnatabelisse uue kirje:
INSERT INTO Price VALUES (3, 400);
Nüüd, kui oleme kirje lisanud tabelisse Price, peaks loodud päästiku tõttu kirje lisama ka tabelisse Price_Audits. Kontrollime järgmist:
SELECT * FROM Price_Audits;
See tagastab järgmise:
Päästik töötas edukalt.
PostgreSQL Loendi käivitaja
Kõik käivitajad, mille loote PostgreSQL on salvestatud tabelisse pg_trigger. Teil olevate päästikute loendi vaatamiseks andmebaas, küsige tabelit, käivitades käsu SELECT, nagu allpool näidatud:
SELECT tgname FROM pg_trigger;
See tagastab järgmise:
Tabeli pg_trigger veerg tgname tähistab päästiku nime.
PostgreSQL Drop Päästik
Kui päästikut enam vaja pole, saate selle sama lihtsalt eemaldada. PostgreSQL päästik, kasutame avaldust DROP TRIGGER järgmise süntaksiga:
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
Parameeter trigger-name tähistab kustutatava päästiku nime.
Tabelinimi tähistab tabeli nime, kust päästik kustutatakse.
Klausel IF EXISTS püüab kustutada olemasoleva päästiku. Kui proovite kustutada päästik, mida pole olemas, ilma IF EXISTS klauslit kasutamata, kuvatakse tõrketeade.
Valik CASCADE aitab teil automaatselt loobuda kõik päästikust sõltuvad objektid.
Kui kasutate suvandit PIIRATA, ei kustutata päästikut, kui objektid sellest sõltuvad.
Näiteks:
Päästiku nimega example_trigger kukutamiseks tabelist Ettevõte käivitage järgmine käsk:
DROP TRIGGER example_trigger IF EXISTS
ON Company;
pgAdmini kasutamine
Vaatame nüüd, kuidas kõiki kolme toimingut pgAdmini abil teostatakse.
Kuidas luua trigerit PostgreSQL kasutades pgAdminit
Siin on, kuidas saate päästiku luua PostgreSQL pgAdmini abil:
Samm 1) Logige sisse oma pgAdmini kontole
Avage pgAdmin ja logige oma kontole sisse oma volituste abil.
2. samm) looge demo andmebaas
- Klõpsake vasakpoolsel navigeerimisribal valikul Andmebaasid.
- Klõpsake Demo.
Samm 3) Tippige päring
Tabeli Price_Audits loomiseks tippige redaktorisse päring:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Samm 4) Käivitage päring
Klõpsake nuppu Käivita.
Samm 5) Käivitage Code auditifunktsiooni jaoks
Funktsiooni auditfunc määratlemiseks käivitage järgmine kood:
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
Samm 6) Käivitage Code päästiku loomiseks
Käivitage hind_trigger käivitamiseks järgmine kood:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
7. samm) Sisestage uus kirje
- Uue kirje lisamiseks hinnatabelisse käivitage järgmine käsk:
INSERT INTO Price VALUES (3, 400)
- Käivitage järgmine käsk, et kontrollida, kas kirje on tabelisse Price_Audits sisestatud:
SELECT * FROM Price_Audits
See peaks tagastama järgmise:
Samm 8) Kontrollige tabeli sisu
Kontrollime tabeli Price_Audits sisu.
Käivitajate loetlemine pgAdmini abil
Step 1) Käivitage järgmine käsk, et kontrollida oma andmebaasi käivitajaid:
SELECT tgname FROM pg_trigger
See tagastab järgmise:
Dropping pgAdmini abil käivitatavad toimingud
Päästiku nimega example_trigger kukutamiseks tabelist Ettevõte käivitage järgmine käsk:
DROP TRIGGER example_trigger IF EXISTS
ON Company
Laadige alla selles õpetuses kasutatud andmebaas







