PostgreSQL Utlösare: Skapa, lista och släpp med exempel
Vad är Trigger i PostgreSQL?
A PostgreSQL Trigger är en funktion som utlöses automatiskt när en databashändelse inträffar på ett databasobjekt. Till exempel ett bord. Exempel på databashändelser som kan aktivera en trigger inkluderar INSERT, UPDATE, DELETE, etc. När du dessutom skapar en trigger för en tabell kommer triggern att släppas automatiskt när den tabellen tas bort.
Hur Trigger används i PostgreSQL?
En trigger kan markeras med FOR EACH ROW-operatören när den skapas. En sådan trigger kommer att anropas en gång för varje rad som ändras av operationen. En utlösare kan också markeras med operatorn FOR EACH STATEMENT när den skapas. Denna utlösare kommer endast att utföras en gång för en specifik operation.
PostgreSQL Skapa Trigger
För att skapa en trigger använder vi funktionen CREATE TRIGGER. Här är syntaxen för funktionen:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
Triggernamnet är namnet på triggern.
FÖRE, EFTER och ISTÄLLET FÖR är nyckelord som bestämmer när utlösaren kommer att anropas.
Händelsenamnet är namnet på händelsen som gör att triggern anropas. Det här kan vara INFOGA, UPPDATERA, DELETE, etc.
Tabellnamnet är namnet på tabellen där utlösaren ska skapas.
Om triggern ska skapas för en INSERT-operation måste vi lägga till parametern ON kolumnnamn.
Följande syntax visar detta:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL Skapa triggerexempel
Vi kommer att använda pristabellen nedan:
Pris:
Låt oss skapa en annan tabell, Price_Audits, där vi kommer att logga ändringarna som gjorts i pristabellen:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
Vi kan nu definiera en ny funktion som heter 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;
Ovanstående funktion kommer att infoga en post i tabellen Price_Audits inklusive det nya rad-id:t och tiden då posten skapas.
Nu när vi har triggerfunktionen bör vi binda den till vår pristabell. Vi kommer att ge triggern namnet price_trigger. Innan en ny post skapas kommer triggerfunktionen att anropas automatiskt för att logga ändringarna. Här är triggern:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
Låt oss infoga en ny post i pristabellen:
INSERT INTO Price VALUES (3, 400);
Nu när vi har infogat en post i pristabellen, bör en post också infogas i tabellen Price_Audit. Detta kommer att vara ett resultat av triggern som vi har skapat på pristabellen. Låt oss kontrollera detta:
SELECT * FROM Price_Audits;
Detta kommer att returnera följande:
Utlösaren fungerade framgångsrikt.
Postgres List Trigger
Alla triggers som du skapar i PostgreSQL lagras i tabellen pg_trigger. För att se listan över triggers som du har på databas, fråga tabellen genom att köra kommandot SELECT enligt nedan:
SELECT tgname FROM pg_trigger;
Detta returnerar följande:
Kolumnen tgname i tabellen pg_trigger anger namnet på utlösaren.
Postgres Drop Trigger
Att släppa en PostgreSQL trigger använder vi DROP TRIGGER-satsen med följande syntax:
DROP TRIGGER [IF EXISTS] trigger-name ON table-name [ CASCADE | RESTRICT ];
Parametern trigger-name anger namnet på triggern som ska raderas.
Tabellnamnet anger namnet på tabellen från vilken triggern ska tas bort.
IF EXISTS-satsen försöker ta bort en trigger som finns. Om du försöker ta bort en utlösare som inte finns utan att använda IF EXISTS-satsen får du ett felmeddelande.
Alternativet CASCADE hjälper dig att automatiskt släppa alla objekt som är beroende av triggern.
Om du använder alternativet BEGRÄNSA kommer triggern inte att tas bort om objekt är beroende av det.
Till exempel:
För att ta bort triggern med namnet example_trigger på tabellpriset kör vi följande kommando:
För att släppa triggern som heter exempel_trigger på tabellen Företag, kör följande kommando:
DROP TRIGGER example_trigger IF EXISTS ON Company;
Använder pgAdmin
Låt oss nu se hur alla tre åtgärderna utfördes med pgAdmin.
Hur man skapar trigger i PostgreSQL med pgAdmin
Så här kan du skapa en utlösare i Postgres med pgAdmin:
Steg 1) Logga in på ditt pgAdmin-konto
Öppna pgAdmin och logga in på ditt konto med dina referenser
Steg 2) Skapa en demodatabas
- Klicka på Databaser i navigeringsfältet till vänster.
- Klicka på Demo.
Steg 3) Skriv frågan
För att skapa tabellen Price_Audits, skriv in frågan i editorn:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
Steg 4) Kör frågan
Klicka på knappen Kör
Steg 5) Kör koden för auditfunc
Kör följande kod för att definiera 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
Steg 6) Kör koden för att skapa trigger
Kör följande kod för att skapa triggern price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
Steg 7) Infoga en ny post
- Kör följande kommando för att infoga en ny post i pristabellen:
INSERT INTO Price VALUES (3, 400)
- Kör följande kommando för att kontrollera om en post har infogats i tabellen Price_Audits:
SELECT * FROM Price_Audits
Detta bör returnera följande:
Steg 8) Kontrollera tabellens innehåll
Låt oss kontrollera innehållet i tabellen Price_Audits:
Listningsutlösare med pgAdmin
Steg 1) Kör följande kommando för att kontrollera utlösare i din databas:
SELECT tgname FROM pg_trigger
Detta returnerar följande:
Släpp triggers med pgAdmin
För att släppa triggern som heter exempel_trigger på tabellen Företag, kör följande kommando:
DROP TRIGGER example_trigger IF EXISTS ON Company
Sammanfattning
- A PostgreSQL trigger hänvisar till en funktion som utlöses automatiskt när en databashändelse inträffar på ett databasobjekt, till exempel en tabell.
- Exempel på sådana databashändelser inkluderar INSERT, UPDATE, DELETE, etc.
- En trigger existerar bara under livslängden för databasobjektet för vilket det skapades.
- Om databasobjektet raderas kommer triggern också att tas bort.
- PostgreSQL triggers skapas med CREATE TRIGGER-satsen.
- Varje trigger är associerad med en funktion som anger vad triggern kommer att göra när den anropas.
Ladda ner den databas som används i denna handledning