PostgreSQL Triggerit: Luo, luettele ja pudota esimerkin avulla
Mitรค Trigger sisรคltรครค PostgreSQL?
A PostgreSQL Laukaista on toiminto, joka kรคynnistyy automaattisesti, kun tietokantatapahtuma tapahtuu tietokantaobjektissa. Esimerkiksi pรถytรค. Esimerkkejรค tietokantatapahtumista, jotka voivat aktivoida triggerin, ovat INSERT, UPDATE, DELETE jne. Lisรคksi, kun luot liipaisimen taulukolle, liipaisin pudotetaan automaattisesti, kun kyseinen taulukko poistetaan.
Kuinka Triggeriรค kรคytetรครคn PostgreSQL?
Triggeri voidaan merkitรค FOR EACH ROW -operaattorilla sen luomisen aikana. Tรคllaista liipaisinta kutsutaan kerran jokaiselle toiminnon muokkaamalle riville. Triggeri voidaan myรถs merkitรค FOR EACH STATEMENT -operaattorilla sen luonnin aikana. Tรคmรค liipaisin suoritetaan vain kerran tietylle toiminnolle.
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 laukaisutoiminto, meidรคn pitรคisi sitoa se hintataulukkoomme. Annamme triggerille nimen price_trigger. Ennen kuin uusi tietue luodaan, laukaisutoiminto kutsutaan automaattisesti kirjaamaan muutokset. Tรคssรค on laukaisin:
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 Hintataulukkoon, tietue tulisi lisรคtรค myรถs Price_Audit-taulukkoon. Tรคmรค johtuu laukaisusta, jonka olemme luoneet Hintataulukkoon. Tarkistakaamme tรคmรค:
SELECT * FROM Price_Audits;
Tรคmรค palauttaa seuraavat tiedot:
Liipaisin toimi onnistuneesti.
Postgres List Trigger
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.
Postgres Drop Trigger
Pudottaaksesi a 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:
Voit poistaa triggerin nimeltรค example_trigger taulukosta Price suorittamalla seuraavan komennon:
Jos haluat pudottaa triggerin nimeltรค example_trigger taulukkoon Yritys, suorita seuraava komento:
DROP TRIGGER example_trigger IF EXISTS ON Company;
pgAdminin avulla
Katsotaan nyt, kuinka kaikki kolme toimintoa suoritettiin pgAdminilla.
Kuinka luoda triggeri sisรครคn PostgreSQL pgAdminin avulla
Nรคin voit luoda triggerin Postgresissa pgAdminin avulla:
Vaihe 1) Kirjaudu pgAdmin-tilillesi
Avaa pgAdmin ja kirjaudu sisรครคn tilillesi tunnuksillasi
Vaihe 2) Luo esittelytietokanta
- Valitse vasemmalla olevasta navigointipalkista Tietokannat.
- Napsauta Demo.
Vaihe 3) Kirjoita kysely
Luo taulukko Price_Audits 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 auditfunc-koodi
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 koodi liipaisimen luomiseksi
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รถ
Tarkastetaan 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:
Triggerien pudottaminen pgAdminilla
Jos haluat pudottaa triggerin nimeltรค example_trigger taulukkoon Yritys, suorita seuraava komento:
DROP TRIGGER example_trigger IF EXISTS ON Company
Yhteenveto
- A PostgreSQL trigger viittaa toimintoon, joka kรคynnistyy automaattisesti, kun tietokantatapahtuma tapahtuu tietokantaobjektissa, kuten taulukossa.
- Esimerkkejรค tรคllaisista tietokantatapahtumista ovat INSERT, UPDATE, DELETE jne.
- Liipaisin on olemassa vain sen tietokantaobjektin elinkaaren aikana, jolle se luotiin.
- Jos tietokantaobjekti poistetaan, myรถs triggeri poistetaan.
- PostgreSQL triggerit luodaan CREATE TRIGGER -kรคskyn avulla.
- Jokainen liipaisin liittyy toimintoon, joka ilmoittaa, mitรค liipaisin tekee, kun sitรค kutsutaan.







