PostgreSQL Utlösare: Skapa, lista och släpp med exempel
⚡ Smart sammanfattning
PostgreSQL Triggers är funktioner som körs automatiskt när en INSERT-, UPDATE- eller DELETE-händelse utlöses på en tabell, vilket gör att databasen kan tillämpa regler, logga ändringar och granska data utan extra applikationskod.

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 en tabell. Exempel på databashändelser som kan aktivera en utlösare inkluderar INSERT, UPDATE, DELETE, etc. Dessutom, när du skapar en utlösare för en tabell, kommer utlösaren att tas bort automatiskt när tabellen tas bort.
Hur Trigger används i PostgreSQL?
En trigger kan markeras med operatorn FOR EACH ROW under skapandet. En sådan trigger anropas en gång för varje rad som ändras av operationen. En trigger kan också markeras med operatorn FOR EACH STATEM under skapandet. Denna trigger exekveras endast 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 ska vi binda den till vår Price-tabell. Vi ger 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 Price-tabellen, bör en post också infogas i Price_Audits-tabellen på grund av den trigger vi skapade. Låt oss kontrollera detta:
SELECT * FROM Price_Audits;
Detta kommer att returnera följande:
Utlösaren fungerade framgångsrikt.
PostgreSQL Listutlösare
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.
PostgreSQL Släpp avtryckaren
När en avtryckare inte längre behövs kan du ta bort den lika enkelt. För 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 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örs med pgAdmin.
Hur man skapar trigger i PostgreSQL med pgAdmin
Så här skapar du en trigger i PostgreSQL använder pgAdmin:
Steg 1) Logga in på ditt pgAdmin-konto
Öppna pgAdmin och logga in på ditt konto med dina inloggningsuppgifter.
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 frågan i redigeraren:
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 Code för revisionsfunktion
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 Code att skapa utlösare
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:
Dropping Utlösare 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
Ladda ner den databas som används i denna handledning







