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.

  • โšก Mรครคritelmรค: Triggeri on funktio, joka kรคynnistyy automaattisesti tietokantatapahtuman, kuten INSERT, UPDATE tai DELETE, seurauksena.
  • ๐Ÿ” Soveltamisala: FOR EACH ROW suorittaa liipaisimen kerran kutakin kyseistรค riviรค kohden, kun taas FOR EACH STATEMENT suorittaa sen kerran operaatiota kohden.
  • ๐Ÿ› ๏ธ Luoda: CREATE TRIGGER sitoo funktion taulukkoon ja asettaa ajoituksen BEFORE, AFTER tai INSTEAD OF.
  • ๐Ÿ“‹ Lista: Tee kysely pg_trigger-luettelosta SELECT tgname -komennolla nรคhdรคksesi kaikki tietokannan liipaisimet.
  • ๐Ÿ—‘๏ธ Drop: DROP TRIGGER poistaa liipaisimen, ja IF EXISTS estรครค virheen, kun liipaisin puuttuu.
  • ๐Ÿค– Tekoรคlyn apu: Tekoรคlyavustajat luovat liipaisufunktioita ja ehdottavat ENNEN tai Jร„LKEEN ajoitusta selkokielisen pyynnรถn perusteella.

PostgreSQL laukaisee

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:

PostgreSQL Luo triggeri

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:

PostgreSQL Luo triggeri

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:

PostgreSQL Listan laukaisin

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

  1. Napsauta vasemmalla olevasta navigointipalkista Tietokannat.
  2. Napsauta Demo.

Luo triggeri sisรครคn PostgreSQL pgAdminin avulla

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.

Luo triggeri sisรครคn PostgreSQL pgAdminin avulla

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

  1. Suorita seuraava komento lisรคtรคksesi uuden tietueen Hintataulukkoon:
INSERT INTO Price
VALUES (3, 400)
  1. Suorita seuraava komento tarkistaaksesi, onko tietue lisรคtty Price_Audits -taulukkoon:
SELECT * FROM Price_Audits

Tรคmรคn pitรคisi palauttaa seuraavat tiedot:

Luo triggeri sisรครคn PostgreSQL pgAdminin avulla

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:

Triggerien luettelointi pgAdminilla

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

UKK

BEFORE-liipaisin suoritetaan ennen rivimuutoksen kirjoittamista, joten se voi muokata tai hylรคtรค rivin. AFTER-liipaisin suoritetaan muutoksen tallentamisen jรคlkeen, mikรค sopii lokikirjaus- ja tarkastustehtรคviin.

INSTEAD OF -liipaisin mรครคritellรครคn nรคkymรคssรค, ei taulukossa. Se korvaa INSERT-, UPDATE- tai DELETE-kรคskyt mukautetulla logiikalla, jolloin vain luku -tilassa olevaan nรคkymรครคn voi kirjoittaa.

Triggerifunktiot kirjoitetaan yleensรค PL/pgSQL:llรค. PostgreSQL tukee myรถs PL/Python, PL/Perl, PL/Tcl ja C, joten voit valita logiikkaasi sopivan kielen.

Kรคytรค komentoa ALTER TABLE table-name DISABLE TRIGGER triggerin_nimi kytkeรคksesi sen pois pรครคltรค ja komentoa ENABLE TRIGGER kytkeรคksesi sen takaisin pรครคlle. Tรคmรค estรครค virheen katoamisen.ping ja liipaisimen uudelleen luominen irtokuormien aikana.

Kyllรค. Jokainen triggeri lisรครค tyรถtรค jokaiselle kyseiselle riville tai lausekkeelle, joten raskas triggerilogiikka voi hidastaa kirjoituksia. Pidรค triggerifunktiot lyhyinรค ja indeksoi kaikki niiden kyselemรคt sarakkeet.

Kyllรค. Jos liipaisin muuttaa toista taulukkoa, jossa on myรถs liipaisimia, nekin aktivoituvat, mikรค luo kaskadi-liipaisimia. PostgreSQL rajoittaa sisรคkkรคisyyden estรครคkseen รครคrettรถmรคt silmukat.

Tekoรคlykoodausavustajat muuttavat selkokielisen pyynnรถn tรคydelliseksi CREATE TRIGGER -lausekkeeksi ja trigger-funktioksi, ehdottavat BEFORE- tai AFTER-ajoitusta ja selittรคvรคt luodun PL/pgSQL:n nopeaa tarkastelua varten.

Kyllรค. Tyรถkalut, kuten pgai ja GPT-pohjaiset avustajat, kรครคntรคvรคt kuvatun sรครคnnรถn trigger-SQL:ksi ja voivat rakentaa INSERT-triggereitรค, jotka automaattisesti merkitsevรคt tai validoivat uudet tiedot niiden saapuessa.

Tiivistรค tรคmรค viesti seuraavasti: