„PostgreSQL“ aktyviklis: sukurkite, išmeskite pavyzdį

Turinys:

Anonim

Kas yra „Postgresql“ trigeriai?

„PostgreSQL“ aktyviklis yra funkcija, kuri suveikia automatiškai, kai duomenų bazės objekte įvyksta duomenų bazės įvykis. Pavyzdžiui, lentelė.

Duomenų bazės įvykių, kurie gali suaktyvinti aktyviklį, pavyzdžiai yra INSERT, UPDATE, DELETE ir kt. Be to, kai sukursite lentelės aktyviklį, trigeris bus automatiškai numestas, kai ta lentelė bus ištrinta.

Šioje „PostgreSQL“ pamokoje sužinosite:

  • Kas yra „Postgresql“ trigeriai?
  • Kaip paleidiklis naudojamas POSRGREQL?
  • Trigerio sukūrimas
  • Naudojant pgAdmin
  • Nuleidimo gaidukai

Kaip paleidiklis naudojamas POSRGREQL?

Trigerį galima pažymėti operatoriumi FOR EACH ROW, jį kuriant. Toks aktyviklis bus iškviestas vieną kartą kiekvienai eilutei, modifikuotai operacijos. Kuriant, aktyviklis taip pat gali būti pažymėtas operatoriumi „FOR EACH STATEMENT“. Šis aktyviklis bus vykdomas tik vieną kartą konkrečiai operacijai.

Trigerio sukūrimas

Norėdami sukurti aktyviklį, naudojame funkciją CREATE TRIGGER. Štai funkcijos sintaksė:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];

Trigerio pavadinimas yra trigerio pavadinimas.

„PRIEŠ, PO“ ir „INSTEAD OF“ yra raktiniai žodžiai, kurie nustato, kada bus suaktyvinta trigerio.

Įvykio pavadinimas yra įvykio, kuris paskatins aktyviklį, pavadinimas. Tai gali būti INSERT, UPDATE, DELETE ir kt.

Lentelės pavadinimas yra lentelės, kurioje turi būti sukurtas aktyviklis, pavadinimas.

Jei reikia sukurti veiksmą INSERT operacijai, turime pridėti ON stulpelio pavadinimo parametrą.

Tai rodo ši sintaksė:

CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];

Pavyzdžiui:

Mes naudosime toliau pateiktą kainų lentelę:

Kaina:

Sukurkime kitą lentelę „Price_Audits“, kurioje registruosime atliktus kainos lentelės pakeitimus:

CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL);

Dabar galime apibrėžti naują funkciją, pavadintą 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;

Pirmiau nurodyta funkcija į lentelę „Price_Audits“ įterps įrašą, įskaitant naują eilutės ID ir įrašo sukūrimo laiką.

Dabar, kai turime trigerio funkciją, turėtume susieti ją su savo kainos lentele. Trigeriui suteiksime pavadinimą price_trigger. Prieš sukuriant naują įrašą, trigerio funkcija bus automatiškai iškviesta registruoti pakeitimus. Čia yra trigeris:

CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();

Įtraukime naują įrašą į kainų lentelę:

INSERT INTO PriceVALUES (3, 400);

Dabar, kai įterpėme įrašą į „Price“ lentelę, įrašas taip pat turėtų būti įterptas į „Price_Audit“ lentelę. Tai bus dėl veiksmo, kurį sukūrėme lentelėje Kaina. Patikrinkime tai:

SELECT * FROM Price_Audits;

Tai grąžins:

Trigeris sėkmingai veikė.

Sąrašo aktyvikliai

Visi „PostgreSQL“ sukurti aktyvikliai yra saugomi lentelėje „pg_trigger“. Norėdami pamatyti duomenų bazėje esančių aktyviklių sąrašą, paklauskite lentelės vykdydami komandą SELECT, kaip parodyta žemiau:

SELECT tgname FROM pg_trigger;

Tai grąžina:

Lentelės „pg_trigger“ stulpelis „tgname“ žymi aktyviklio pavadinimą.

Nuleidimo veiksniai

Norėdami atsisakyti „PostgreSQL“ aktyviklio, mes naudojame sakinį DROP TRIGGER su šia sintakse:

DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];

Trigerio pavadinimo parametras žymi trigerio, kurį reikia ištrinti, pavadinimą.

Lentelės pavadinimas nurodo lentelės, iš kurios reikia ištrinti aktyviklį, pavadinimą.

Sąlyga „IF EXISTS“ bando ištrinti esamą aktyviklį. Jei bandysite ištrinti trigerį, kurio nėra, nenaudodami sąlygos IF EXISTS, gausite klaidą.

CASCADE parinktis padės automatiškai išmesti visus objektus, kurie priklauso nuo gaiduko.

Jei naudojate RESTRICT parinktį, aktyviklis nebus ištrintas, jei objektai priklauso nuo jo.

Pavyzdžiui:

Norėdami ištrinti aktyviklį pavadinimu example_trigger lentelėje Price, vykdome šią komandą:

Norėdami mesti aktyviklį pavadinimu example_trigger lentelėje Įmonė, vykdykite šią komandą:

DROP TRIGGER example_trigger IF EXISTSON Company;

Naudojant pgAdmin

Dabar pažiūrėkime, kaip visi trys veiksmai buvo atlikti naudojant „pgAdmin“.

Trigerių kūrimas

Norėdami tai padaryti per „pgAdmin“, atlikite tai:

1 veiksmas) Prisijunkite prie „pgAdmin“ paskyros.

2 žingsnis)

  1. Kairėje esančioje naršymo juostoje spustelėkite Duomenų bazės.
  2. Spustelėkite Demo.

3 žingsnis. Norėdami sukurti lentelę „Price_Audits“, įveskite užklausos redaktorių:

CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)

4 žingsnis) Spustelėkite mygtuką Vykdyti.

5 žingsnis. Norėdami apibrėžti auditfunc funkciją, paleiskite šį kodą:

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

6 žingsnis. Paleiskite šį kodą, kad sukurtumėte aktyviklį price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()

7 žingsnis)

  1. Norėdami įterpti naują įrašą į kainų lentelę, vykdykite šią komandą:
    INSERT INTO PriceVALUES (3, 400)
  2. Vykdykite šią komandą, kad patikrintumėte, ar įrašas buvo įterptas į lentelę „Price_Audits“:
    SELECT * FROM Price_Audits

    Tai turėtų grąžinti:

8 žingsnis) Patikrinkime lentelės „Price_Audits“ turinį:

Sąrašo aktyvikliai

1 žingsnis. Paleiskite šią komandą, kad patikrintumėte trigerius savo duomenų bazėje:

SELECT tgname FROM pg_trigger

Tai grąžina:

Nuleidimo gaidukai

Norėdami mesti aktyviklį pavadinimu example_trigger lentelėje Įmonė, vykdykite šią komandą:

DROP TRIGGER example_trigger IF EXISTSON Company

Santrauka:

  • „PostgreSQL“ aktyviklis nurodo funkciją, kuri suveikia automatiškai, kai duomenų bazės objekte, pvz., Lentelėje, įvyksta duomenų bazės įvykis.
  • Tokių duomenų bazės įvykių pavyzdžiai yra INSERT, UPDATE, DELETE ir kt.
  • Trigeris egzistuoja tik per visą duomenų bazės objekto, kuriam jis buvo sukurtas, gyvavimo laiką.
  • Jei duomenų bazės objektas bus ištrintas, trigeris taip pat bus ištrintas.
  • „PostgreSQL“ aktyvikliai sukuriami naudojant CREATE TRIGGER sakinį.
  • Kiekvienas paleidiklis yra susietas su funkcija, nurodančia, kokį veiksmą atliks, kai jis bus iškviečiamas.

Atsisiųskite šioje pamokoje naudojamą duomenų bazę