PostgreSQL Utløsere: Opprett, liste og slipp med eksempel
Hva er Trigger i PostgreSQL?
A PostgreSQL Avtrekker er en funksjon som utløses automatisk når en databasehendelse oppstår på et databaseobjekt. For eksempel et bord. Eksempler på databasehendelser som kan aktivere en trigger inkluderer INSERT, UPDATE, DELETE, etc. Når du oppretter en trigger for en tabell, vil utløseren dessuten bli slettet når den tabellen slettes.
Hvordan Trigger brukes i PostgreSQL?
En utløser kan merkes med FOR EACH ROW-operatøren under opprettelsen. En slik utløser vil bli kalt én gang for hver rad modifisert av operasjonen. En trigger kan også merkes med FOR EACH STATEMENT-operatøren under opprettelsen. Denne utløseren vil kun utføres én gang for en spesifikk operasjon.
PostgreSQL Lag Trigger
For å lage en trigger bruker vi CREATE TRIGGER-funksjonen. Her er syntaksen for funksjonen:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
Triggernavnet er navnet på utløseren.
FØR, ETTER og I stedet for er nøkkelord som bestemmer når utløseren vil bli påkalt.
Hendelsesnavnet er navnet på hendelsen som vil føre til at utløseren blir påkalt. Dette kan være INSERT, OPPDATERING, SLETT osv.
Tabellnavnet er navnet på tabellen som utløseren skal opprettes på.
Hvis triggeren skal opprettes for en INSERT-operasjon, må vi legge til parameteren ON kolonnenavn.
Følgende syntaks demonstrerer dette:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Lag triggereksempel
Vi vil bruke pristabellen nedenfor:
Pris:
La oss lage en annen tabell, Price_Audits, der vi vil logge endringene som er gjort i pristabellen:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Vi kan nå definere en ny funksjon kalt 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;
Funksjonen ovenfor vil sette inn en post i tabellen Pris_revisjon, inkludert den nye rad-IDen og tidspunktet posten er opprettet.
Nå som vi har triggerfunksjonen, bør vi binde den til vår pristabell. Vi vil gi utløseren navnet price_trigger. Før en ny post opprettes, aktiveres utløserfunksjonen automatisk for å logge endringene. Her er utløseren:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
La oss sette inn en ny post i pristabellen:
INSERT INTO Price VALUES (3, 400);
Nå som vi har satt inn en post i Pris-tabellen, bør en post også settes inn i Price_Audit-tabellen. Dette vil være et resultat av triggeren som vi har opprettet på pristabellen. La oss sjekke dette:
SELECT * FROM Price_Audits;
Dette vil returnere følgende:
Utløseren fungerte vellykket.
Postgres List Trigger
Alle triggere du oppretter i PostgreSQL er lagret i pg_trigger-tabellen. For å se listen over utløsere du har på database, spør i tabellen ved å kjøre SELECT-kommandoen som vist nedenfor:
SELECT tgname FROM pg_trigger;
Dette returnerer følgende:
tgname-kolonnen i pg_trigger-tabellen angir navnet på utløseren.
Postgres Drop Trigger
Å slippe en PostgreSQL trigger, bruker vi DROP TRIGGER-setningen med følgende syntaks:
DROP TRIGGER [IF EXISTS] trigger-name ON table-name [ CASCADE | RESTRICT ];
Trigger-name-parameteren angir navnet på triggeren som skal slettes.
Tabellnavnet angir navnet på tabellen som utløseren skal slettes fra.
IF EXISTS-leddet forsøker å slette en trigger som eksisterer. Hvis du prøver å slette en trigger som ikke eksisterer uten å bruke IF EXISTS-klausulen, får du en feilmelding.
CASCADE-alternativet vil hjelpe deg å slippe alle objekter som er avhengige av triggeren automatisk.
Hvis du bruker RESTRICT-alternativet, vil ikke utløseren slettes hvis objekter er avhengige av den.
For eksempel:
For å slette triggeren som heter example_trigger på tabellen Pris, kjører vi følgende kommando:
For å slippe triggeren som heter example_trigger på tabellen Company, kjør følgende kommando:
DROP TRIGGER example_trigger IF EXISTS ON Company;
Bruker pgAdmin
La oss nå se hvordan alle tre handlingene utførte med pgAdmin.
Hvordan lage trigger i PostgreSQL ved å bruke pgAdmin
Slik kan du opprette en trigger i Postgres ved å bruke pgAdmin:
Trinn 1) Logg på pgAdmin-kontoen din
Åpne pgAdmin og logg på kontoen din med legitimasjonen din
Trinn 2) Opprett en demodatabase
- Fra navigasjonslinjen til venstre klikker du på Databaser.
- Klikk på Demo.
Trinn 3) Skriv inn spørringen
For å lage tabellen Price_Audits, skriv inn spørringen i redigeringsprogrammet:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Trinn 4) Utfør spørringen
Klikk på Utfør-knappen
Trinn 5) Kjør koden for auditfunc
Kjør følgende kode for å definere funksjonen 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
Trinn 6) Kjør koden for å opprette trigger
Kjør følgende kode for å opprette trigger price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
Trinn 7) Sett inn en ny post
- Kjør følgende kommando for å sette inn en ny post i pristabellen:
INSERT INTO Price VALUES (3, 400)
- Kjør følgende kommando for å sjekke om en post ble satt inn i tabellen Price_Audits:
SELECT * FROM Price_Audits
Dette bør returnere følgende:
Trinn 8) Sjekk tabellinnholdet
La oss sjekke innholdet i tabellen Pris_revisjon:
Oppføringstriggere ved hjelp av pgAdmin
Trinn 1) Kjør følgende kommando for å sjekke utløsere i databasen din:
SELECT tgname FROM pg_trigger
Dette returnerer følgende:
Slippe triggere ved å bruke pgAdmin
For å slippe triggeren som heter example_trigger på tabellen Company, kjør følgende kommando:
DROP TRIGGER example_trigger IF EXISTS ON Company
Oppsummering
- A PostgreSQL trigger refererer til en funksjon som utløses automatisk når en databasehendelse oppstår på et databaseobjekt, for eksempel en tabell.
- Eksempler på slike databasehendelser inkluderer INSERT, UPDATE, DELETE, etc.
- En utløser eksisterer bare i løpet av levetiden til databaseobjektet den ble opprettet for.
- Hvis databaseobjektet slettes, vil triggeren også bli slettet.
- PostgreSQL utløsere opprettes ved å bruke CREATE TRIGGER-setningen.
- Hver utløser er knyttet til en funksjon som sier hva utløseren vil gjøre når den påkalles.
Last ned databasen som brukes i denne opplæringen