Hvad er Postgresql-udløsere?
En 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, inkluderer INSERT, UPDATE, DELETE osv. Når du opretter en trigger til en tabel, slettes triggeren automatisk, når den tabel slettes.
I denne PostgreSQL-selvstudie lærer du følgende:
- Hvad er Postgresql-udløsere?
- Hvordan bruges udløser i POSRGREQL?
- Oprettelse af en udløser
- Brug af pgAdmin
- Faldende udløsere
Hvordan bruges udløser i POSRGREQL?
En trigger kan markeres med FOR EACH ROW-operatøren under oprettelsen. En sådan udløser kaldes en gang for hver række ændret af operationen. En trigger kan også markeres med operatøren FOR EACH STATEMENT under oprettelsen. Denne trigger udføres kun en gang for en bestemt operation.
Oprettelse af en udløser
For at oprette en trigger bruger vi CREATE TRIGGER-funktionen. Her er syntaksen for funktionen:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];
Trigger-navnet er navnet på udløseren.
FØR, EFTER og INSTEAD AF er nøgleord, der bestemmer, hvornår udløseren skal påberåbes.
Begivenhedsnavnet er navnet på den begivenhed, der får udløseren til at blive påberåbt. Dette kan være INDSÆT, OPDATER, SLET osv.
Tabellenavnet er navnet på den tabel, som udløseren skal oprettes på.
Hvis udløseren 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-nameON table-name[-- Trigger logic];
For eksempel:
Vi bruger nedenstående pristabel:
Pris:
Lad os oprette en anden tabel, Price_Audits, hvor vi logger de ændringer, der er foretaget i Pris-tabellen:
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$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql;
Ovenstående funktion indsætter en post i tabellen Price_Audits inklusive den nye række-id og det tidspunkt, hvor posten oprettes.
Nu hvor vi har triggerfunktionen, skal vi binde den til vores pristabel. Vi giver udløseren 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 PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Lad os indsætte en ny post i pristabellen:
INSERT INTO PriceVALUES (3, 400);
Nu hvor vi har indsat en post i pristabellen, skal en post også indsættes i Price_Audit-tabellen. Dette vil være som et resultat af den udløser, som vi har oprettet på Pris-tabellen. Lad os kontrollere dette:
SELECT * FROM Price_Audits;
Dette returnerer følgende:
Udløseren fungerede med succes.
Listing udløser
Alle udløsere, du opretter i PostgreSQL, gemmes i tabellen pg_trigger. For at se listen over udløsere, du har i databasen, skal du spørge tabellen ved at køre kommandoen SELECT som vist nedenfor:
SELECT tgname FROM pg_trigger;
Dette returnerer følgende:
Kolonnen tgname i tabellen pg_trigger angiver navnet på udløseren.
Slip udløsere
For at droppe en PostgreSQL-udløser bruger vi DROP TRIGGER-sætningen med følgende syntaks:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
Parameteren trigger-name angiver navnet på den trigger, der skal slettes.
Tabellenavnet angiver navnet på den tabel, hvorfra udløseren skal slettes.
IF EXISTS-klausulen forsøger at slette en eksisterende trigger. Hvis du forsøger at slette en udløser, der ikke eksisterer uden at bruge IF EXISTS-klausulen, får du en fejl.
CASCADE-indstillingen hjælper dig med automatisk at slippe alle objekter, der afhænger af udløseren.
Hvis du bruger RESTRICT-indstillingen, slettes udløseren ikke, hvis objekter er afhængige af den.
For eksempel:
For at slette udløseren med navnet example_trigger i tabel Price kører vi følgende kommando:
For at slippe udløseren med navnet example_trigger på tabellen Company skal du køre følgende kommando:
DROP TRIGGER example_trigger IF EXISTSON Company;
Brug af pgAdmin
Lad os nu se, hvordan alle tre handlinger udføres ved hjælp af pgAdmin.
Oprettelse af udløsere
For at opnå det samme gennem pgAdmin skal du gøre dette:
Trin 1) Log ind på din pgAdmin-konto.
Trin 2)
- Fra navigationslinjen til venstre - Klik på Databaser.
- Klik på Demo.
Trin 3) Skriv forespørgselseditoren for at oprette tabellen Price_Audits:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
Trin 4) Klik på knappen Udfør.
Trin 5) Kør følgende kode for at definere funktionen auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql
Trin 6) Kør følgende kode for at oprette trigger price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Trin 7)
- Kør følgende kommando for at indsætte en ny post i pristabellen:
INSERT INTO PriceVALUES (3, 400)
- Kør følgende kommando for at kontrollere, om en post blev indsat i Price_Audits-tabellen:
SELECT * FROM Price_Audits
Dette skal returnere følgende:
Trin 8) Lad os kontrollere indholdet af Price_Audits-tabellen:
Listing udløser
Trin 1) Kør følgende kommando for at kontrollere udløserne i din database:
SELECT tgname FROM pg_trigger
Dette returnerer følgende:
Faldende udløsere
For at slippe udløseren med navnet example_trigger på tabellen Company skal du køre følgende kommando:
DROP TRIGGER example_trigger IF EXISTSON Company
Resumé:
- En PostgreSQL-udløser henviser 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, SLET osv.
- En trigger findes kun i løbet af det databaseobjekt, som det blev oprettet til, i hele levetiden.
- Hvis databaseobjektet slettes, udløses også udløseren.
- PostgreSQL-udløsere oprettes ved hjælp af CREATE TRIGGER-sætningen.
- Hver udløser er forbundet med en funktion, der angiver, hvad udløseren vil gøre, når den påberåbes.
Download den database, der blev brugt i denne vejledning