PostgreSQL Triggerit: Luo, luettele ja pudota esimerkin avulla
โก รlykรคs yhteenveto
PostgreSQL Triggerit ovat funktioita, jotka suoritetaan automaattisesti, kun INSERT-, UPDATE- tai DELETE-tapahtuma kรคynnistyy taulukossa. Nรคin tietokanta voi valvoa sรครคntรถjรค, kirjata muutoksia ja auditoida tietoja ilman ylimรครคrรคistรค sovelluskoodia.

Mitรค Trigger sisรคltรครค PostgreSQL?
A PostgreSQL Laukaista on funktio, joka kรคynnistyy automaattisesti, kun tietokantatapahtuma tapahtuu tietokantaobjektissa, esimerkiksi taulukossa. Esimerkkejรค tietokantatapahtumista, jotka voivat aktivoida liipaisimen, ovat INSERT, UPDATE ja DELETE. Lisรคksi, kun luot liipaisimen taulukolle, liipaisin poistetaan automaattisesti, kun kyseinen taulukko poistetaan.
Kuinka Triggeriรค kรคytetรครคn PostgreSQL?
Liipaisin voidaan merkitรค FOR EACH ROW -operaattorilla sen luomisen yhteydessรค. Tรคllainen liipaisin kutsutaan kerran jokaista operaation muokkaamaa riviรค kohden. Liipaisin voidaan myรถs merkitรค FOR EACH STATEMENT -operaattorilla sen luomisen yhteydessรค. Tรคmรค liipaisin suoritetaan vain kerran tiettyรค toimintoa kohden.
PostgreSQL Luo triggeri
Liipaisimen luomiseen kรคytรคmme CREATE TRIGGER -toimintoa. Tรคssรค on funktion syntaksi:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
Trigger-nimi on liipaisimen nimi.
ENNEN, AFTER ja INSTEEAD OF ovat avainsanoja, jotka mรครคrittรคvรคt, milloin laukaisinta vedetรครคn.
Tapahtuman nimi on sen tapahtuman nimi, joka laukaisee liipaisimen. Tรคmรค voi olla INSERT, PรIVITYS, POISTA jne.
Taulukon nimi on sen taulukon nimi, johon liipaisin luodaan.
Jos liipaisin on tarkoitus luoda INSERT-operaatiolle, meidรคn on lisรคttรคvรค parametri ON sarakkeen nimi.
Seuraava syntaksi osoittaa tรคmรคn:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Luo laukaisuesimerkki
Kรคytรคmme alla olevaa hintataulukkoa:
Hinta:
Luodaan toinen taulukko, Price_Audits, johon kirjaamme Hintataulukkoon tehdyt muutokset:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Voimme nyt mรครคrittรครค uuden funktion nimeltรค 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;
Yllรค oleva toiminto lisรครค taulukkoon Price_Audits tietueen, joka sisรคltรครค uuden rivitunnuksen ja tietueen luomisajan.
Nyt kun meillรค on trigger-funktio, meidรคn tulisi sitoa se Price-taulukkoomme. Annamme triggerin nimeksi price_trigger. Ennen uuden tietueen luomista trigger-funktio kutsutaan automaattisesti muutosten kirjaamiseksi. Tรคssรค on trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Lisรคtรครคn uusi tietue Hintataulukkoon:
INSERT INTO Price VALUES (3, 400);
Nyt kun olemme lisรคnneet tietueen Price-taulukkoon, tietue pitรคisi lisรคtรค myรถs Price_Audits-taulukkoon luomamme triggerin vuoksi. Tarkistetaanpa tรคmรค:
SELECT * FROM Price_Audits;
Tรคmรค palauttaa seuraavat tiedot:
Liipaisin toimi onnistuneesti.
PostgreSQL Listan laukaisin
Kaikki luomasi triggerit PostgreSQL tallennetaan pg_trigger-taulukkoon. Nรคhdรคksesi luettelon kรคynnistimistรค, jotka sinulla on tietokanta, tee kysely taulukosta suorittamalla SELECT-komento alla olevan kuvan mukaisesti:
SELECT tgname FROM pg_trigger;
Tรคmรค palauttaa seuraavan:
Pg_trigger-taulukon tgname-sarake ilmaisee triggerin nimen.
PostgreSQL Pudotusliipaisin
Kun liipaisinta ei enรครค tarvita, voit irrottaa sen yhtรค helposti. Pudottaaksesi PostgreSQL trigger, kรคytรคmme DROP TRIGGER -lausetta seuraavalla syntaksilla:
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
Trigger-name-parametri ilmaisee poistettavan triggerin nimen.
Taulukon nimi tarkoittaa sen taulukon nimeรค, josta laukaisin poistetaan.
IF EXISTS -lause yrittรครค poistaa olemassa olevan laukaisimen. Jos yritรคt poistaa liipaisimen, jota ei ole olemassa, kรคyttรคmรคttรค IF EXISTS -lausetta, saat virheilmoituksen.
CASCADE-vaihtoehto auttaa sinua pudottamaan kaikki laukaisimesta riippuvat objektit automaattisesti.
Jos kรคytรคt RESTRICT-vaihtoehtoa, laukaisinta ei poisteta, jos objektit ovat riippuvaisia โโsiitรค.
Esimerkiksi:
Jos haluat pudottaa triggerin nimeltรค example_trigger taulukkoon Yritys, suorita seuraava komento:
DROP TRIGGER example_trigger IF EXISTS
ON Company;
pgAdminin avulla
Katsotaanpa nyt, miten kaikki kolme toimintoa suoritetaan pgAdminilla.
Kuinka luoda triggeri sisรครคn PostgreSQL pgAdminin avulla
Nรคin voit luoda liipaisimen PostgreSQL pgAdminin avulla:
Vaihe 1) Kirjaudu pgAdmin-tilillesi
Avaa pgAdmin ja kirjaudu tilillesi tunnuksillasi.
Vaihe 2) Luo esittelytietokanta
- Napsauta vasemmalla olevasta navigointipalkista Tietokannat.
- Napsauta Demo.
Vaihe 3) Kirjoita kysely
Luo Price_Audits-taulukko kirjoittamalla kysely editoriin:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Vaihe 4) Suorita kysely
Napsauta Suorita-painiketta.
Vaihe 5) Suorita Code auditfunc-toimintoa varten
Suorita seuraava koodi mรครคrittรครคksesi auditfunc-funktion:
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
Vaihe 6) Suorita Code luoda liipaisin
Suorita seuraava koodi luodaksesi triggerin price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
Vaihe 7) Lisรครค uusi tietue
- Suorita seuraava komento lisรคtรคksesi uuden tietueen Hintataulukkoon:
INSERT INTO Price VALUES (3, 400)
- Suorita seuraava komento tarkistaaksesi, onko tietue lisรคtty Price_Audits -taulukkoon:
SELECT * FROM Price_Audits
Tรคmรคn pitรคisi palauttaa seuraavat tiedot:
Vaihe 8) Tarkista taulukon sisรคltรถ
Tarkistetaan Price_Audits-taulukon sisรคltรถ.
Triggerien luettelointi pgAdminilla
Vaihe 1) Suorita seuraava komento tarkistaaksesi tietokannan triggerit:
SELECT tgname FROM pg_trigger
Tรคmรค palauttaa seuraavan:
Pudotaping pgAdminin avulla toimivat kรคynnistimet
Jos haluat pudottaa triggerin nimeltรค example_trigger taulukkoon Yritys, suorita seuraava komento:
DROP TRIGGER example_trigger IF EXISTS
ON Company
Lataa tรคssรค opetusohjelmassa kรคytetty tietokanta







