PostgreSQL Udløsere: Opret, liste og slip med eksempel
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. For eksempel et bord. Eksempler på databasehændelser, der kan aktivere en trigger, omfatter INSERT, UPDATE, DELETE osv. Når du opretter en trigger for en tabel, vil triggeren desuden blive slettet automatisk, når den tabel slettes.
Hvordan Trigger bruges i PostgreSQL?
En trigger kan markeres med FOR EACH ROW-operatøren under oprettelsen. En sådan trigger vil blive kaldt én gang for hver række, der ændres af operationen. En trigger kan også markeres med FOR EACH STATEMENT-operatøren under oprettelsen. Denne trigger vil kun blive udført é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, bør vi binde den til vores pristabel. Vi vil give triggeren navnet price_trigger. Før en ny post oprettes, aktiveres triggerfunktionen automatisk for at logge ændringerne. Her er udløseren:
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 tabellen Pris, skal en post også indsættes i tabellen Pris_Audit. Dette vil være et resultat af den trigger, som vi har oprettet på pristabellen. Lad os tjekke dette:
SELECT * FROM Price_Audits;
Dette vil returnere følgende:
Udløseren fungerede med succes.
Postgres List Trigger
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.
Postgres Drop Trigger
At droppe 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 slette triggeren ved navn example_trigger på tabellen Pris, kører vi følgende kommando:
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ørte ved hjælp af pgAdmin.
Sådan opretter du trigger i PostgreSQL ved hjælp af pgAdmin
Her er hvordan du kan oprette en trigger i Postgres ved hjælp af pgAdmin:
Trin 1) Log ind på din pgAdmin-konto
Åbn pgAdmin og log ind på din konto ved hjælp af dine legitimationsoplysninger
Trin 2) Opret en demodatabase
- Fra navigationslinjen til venstre - Klik på Databaser.
- 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 koden for auditfunc
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 koden for at oprette 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:
Slipning af triggere 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
Resumé
- A PostgreSQL trigger refererer til en funktion, der udløses automatisk, når en databasehændelse opstår på et databaseobjekt, såsom en tabel.
- Eksempler på sådanne databasehændelser inkluderer INSERT, UPDATE, DELETE osv.
- En trigger eksisterer kun i løbet af levetiden for det databaseobjekt, som det blev oprettet for.
- Hvis databaseobjektet slettes, vil triggeren også blive slettet.
- PostgreSQL triggere oprettes ved hjælp af CREATE TRIGGER-sætningen.
- Hver trigger er forbundet med en funktion, der angiver, hvad triggeren vil gøre, når den aktiveres.
Download databasen brugt i denne vejledning