PostgreSQL Utløsere: Opprett, liste og slipp med eksempel
⚡ Smart oppsummering
PostgreSQL Utløsere er funksjoner som kjører automatisk når en INSERT-, UPDATE- eller DELETE-hendelse utløses på en tabell, slik at databasen kan håndheve regler, logge endringer og revidere data uten ekstra applikasjonskode.

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 en tabell. Eksempler på databasehendelser som kan aktivere en utløser inkluderer INSERT, UPDATE, DELETE osv. Dessuten, når du oppretter en utløser for en tabell, vil utløseren bli fjernet automatisk når tabellen slettes.
Hvordan Trigger brukes i PostgreSQL?
En trigger kan merkes med FOR EACH ROW-operatoren under opprettelsen. En slik trigger vil bli kalt én gang for hver rad som endres av operasjonen. En trigger kan også merkes med FOR EACH STATEM-operatoren under opprettelsen. Denne triggeren vil bare bli utført é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 Price-tabell. Vi gir triggeren navnet price_trigger. Før en ny post opprettes, vil triggerfunksjonen automatisk bli kalt for å logge endringene. Her er triggeren:
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 Price-tabellen, bør en post også settes inn i Price_Audits-tabellen på grunn av utløseren vi opprettet. La oss sjekke dette:
SELECT * FROM Price_Audits;
Dette vil returnere følgende:
Utløseren fungerte vellykket.
PostgreSQL Listeutløser
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.
PostgreSQL Slipp utløseren
Når en utløser ikke lenger er nødvendig, kan du fjerne den like enkelt. For å 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 å 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øres ved hjelp av pgAdmin.
Hvordan lage trigger i PostgreSQL ved å bruke pgAdmin
Slik kan du opprette en trigger i PostgreSQL bruker pgAdmin:
Trinn 1) Logg på pgAdmin-kontoen din
Åpne pgAdmin og logg inn på kontoen din med påloggingsinformasjonen din.
Trinn 2) Opprett en demodatabase
- Fra navigasjonslinjen til venstre klikker du på Databaser.
- Klikk på Demo.
Trinn 3) Skriv inn spørringen
For å opprette 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 Code for revisjonsfunksjon
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 Code å lage 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 Price_Audits-tabellen.
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:
Dropping Utløsere ved bruk av pgAdmin
For å slippe triggeren som heter example_trigger på tabellen Company, kjør følgende kommando:
DROP TRIGGER example_trigger IF EXISTS
ON Company
Last ned databasen som brukes i denne opplæringen







