PostgreSQL Udløsere: Opret, liste og slip med eksempel
⚡ Smart opsummering
PostgreSQL Triggere er funktioner, der kører automatisk, når en INSERT-, UPDATE- eller DELETE-hændelse udløses på en tabel, hvilket giver databasen mulighed for at håndhæve regler, logge ændringer og revidere data uden ekstra applikationskode.

Hvad er Trigger i PostgreSQL?
A PostgreSQL Udløser er en funktion, der udløses automatisk, når en databasehændelse opstår på et databaseobjekt, f.eks. en tabel. Eksempler på databasehændelser, der kan aktivere en trigger, omfatter INSERT, UPDATE, DELETE osv. Desuden, når du opretter en trigger for en tabel, vil triggeren automatisk blive fjernet, når tabellen slettes.
Hvordan Trigger bruges i PostgreSQL?
En trigger kan markeres med FOR EACH ROW-operatoren under oprettelsen. En sådan trigger kaldes én gang for hver række, der ændres af operationen. En trigger kan også markeres med FOR EACH STATEM-operatoren under oprettelsen. Denne trigger udføres kun én gang for en specifik operation.
PostgreSQL Opret Trigger
For at oprette en trigger bruger vi funktionen CREATE TRIGGER. Her er syntaksen for funktionen:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
Triggernavnet er navnet på triggeren.
FØR, EFTER og I stedet for er nøgleord, der bestemmer, hvornår triggeren vil blive aktiveret.
Hændelsesnavnet er navnet på den hændelse, der vil få triggeren til at blive aktiveret. Dette kan være INSERT, OPDATERING, SLET osv.
Tabelnavnet er navnet på den tabel, som triggeren skal oprettes på.
Hvis triggeren skal oprettes til en INSERT operation, skal vi tilføje parameteren ON kolonnenavn.
Følgende syntaks demonstrerer dette:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Opret triggereksempel
Vi vil bruge pristabellen nedenfor:
Pris:
Lad os oprette en anden tabel, Price_Audits, hvor vi logger ændringerne i pristabellen:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Vi kan nu definere en ny funktion ved navn 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;
Ovenstående funktion vil indsætte en post i tabellen Price_Audits inklusive det nye række-id og tidspunktet for oprettelsen af posten.
Nu hvor vi har triggerfunktionen, skal vi binde den til vores Price-tabel. Vi giver triggeren navnet price_trigger. Før en ny post oprettes, vil triggerfunktionen automatisk blive kaldt for at logge ændringerne. Her er triggeren:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Lad os indsætte en ny post i pristabellen:
INSERT INTO Price VALUES (3, 400);
Nu hvor vi har indsat en post i Price-tabellen, skal der også indsættes en post i Price_Audits-tabellen på grund af den trigger, vi oprettede. Lad os tjekke dette:
SELECT * FROM Price_Audits;
Dette vil returnere følgende:
Udløseren fungerede med succes.
PostgreSQL Listeudløser
Alle triggere, som du opretter i PostgreSQL er gemt i pg_trigger-tabellen. For at se listen over triggere, som du har på database, forespørg tabellen ved at køre SELECT-kommandoen som vist nedenfor:
SELECT tgname FROM pg_trigger;
Dette returnerer følgende:
Kolonnen tgname i tabellen pg_trigger angiver navnet på triggeren.
PostgreSQL Drop Trigger
Når en udløser ikke længere er nødvendig, kan du fjerne den lige så nemt. For at slippe en PostgreSQL trigger, bruger vi DROP TRIGGER-sætningen med følgende syntaks:
DROP TRIGGER [IF EXISTS] trigger-name
ON table-name [ CASCADE | RESTRICT ];
Trigger-name parameteren angiver navnet på den trigger, der skal slettes.
Tabelnavnet angiver navnet på den tabel, hvorfra triggeren skal slettes.
IF EXISTS-sætningen forsøger at slette en trigger, der eksisterer. Hvis du forsøger at slette en trigger, der ikke eksisterer uden at bruge IF EXISTS-sætningen, får du en fejl.
CASCADE-indstillingen hjælper dig med automatisk at slippe alle objekter, der afhænger af triggeren.
Hvis du bruger RESTRICT-indstillingen, slettes triggeren ikke, hvis objekter er afhængige af den.
For eksempel:
For at slippe triggeren ved navn example_trigger på tabellen Company skal du køre følgende kommando:
DROP TRIGGER example_trigger IF EXISTS
ON Company;
Bruger pgAdmin
Lad os nu se, hvordan alle tre handlinger udføres ved hjælp af pgAdmin.
Sådan opretter du trigger i PostgreSQL ved hjælp af pgAdmin
Sådan kan du oprette en trigger i PostgreSQL ved hjælp af pgAdmin:
Trin 1) Log ind på din pgAdmin-konto
Åbn pgAdmin og log ind på din konto med dine loginoplysninger.
Trin 2) Opret en demodatabase
- Klik på Databaser i navigationslinjen til venstre.
- Klik på Demo.
Trin 3) Indtast forespørgslen
For at oprette tabellen Price_Audits skal du skrive forespørgslen i editoren:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Trin 4) Udfør forespørgslen
Klik på knappen Udfør.
Trin 5) Kør Code til revisionsfunktion
Kør følgende kode for at definere funktionen 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
Trin 6) Kør Code at skabe trigger
Kør følgende kode for at oprette trigger price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
Trin 7) Indsæt en ny post
- Kør følgende kommando for at indsætte en ny post i pristabellen:
INSERT INTO Price VALUES (3, 400)
- Kør følgende kommando for at kontrollere, om en post blev indsat i tabellen Price_Audits:
SELECT * FROM Price_Audits
Dette skulle returnere følgende:
Trin 8) Tjek tabelindholdet
Lad os tjekke indholdet af tabellen Price_Audits.
Listeudløsere ved hjælp af pgAdmin
Trin 1) Kør følgende kommando for at kontrollere triggerne i din database:
SELECT tgname FROM pg_trigger
Dette returnerer følgende:
Dropping Udløsere ved hjælp af pgAdmin
For at slippe triggeren ved navn example_trigger på tabellen Company skal du køre følgende kommando:
DROP TRIGGER example_trigger IF EXISTS
ON Company
Download databasen brugt i denne vejledning







