PostgreSQL Trigger: Skapa, släpp exempel

Innehållsförteckning:

Anonim

Vad är Postgresql Triggers?

En PostgreSQL-utlösare ä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 utlösare inkluderar INSERT, UPDATE, DELETE, etc. När du dessutom skapar en trigger för en tabell kommer utlösaren att tappas automatiskt när den tabellen raderas.

I den här PostgreSQL-självstudien lär du dig följande:

  • Vad är Postgresql Triggers?
  • Hur Trigger används i POSRGREQL?
  • Skapa en utlösare
  • Använda pgAdmin
  • Dropping Triggers

Hur Trigger används i POSRGREQL?

En utlösare kan markeras med FOR EACH ROW-operatören när den skapas. En sådan utlösare kommer att anropas en gång för varje rad som modifieras av operationen. En trigger kan också markeras med FOR EACH STATEMENT-operatören under skapandet. Denna utlösare körs bara en gång för en specifik operation.

Skapa en utlösare

För att skapa en utlösare använder vi CREATE TRIGGER-funktionen. Här är syntaxen för funktionen:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];

Utlösarnamnet är namnet på utlösaren.

FÖRE, EFTER och INSTÄLD AV är nyckelord som avgör när utlösaren ska åberopas.

Händelsenamnet är namnet på händelsen som kommer att orsaka att utlösaren åberopas. Detta kan vara INSERT, UPDATE, DELETE, etc.

Tabellnamnet är namnet på den tabell som utlösaren ska skapas på.

Om utlösaren ska skapas för en INSERT-operation måste vi lägga till parametern PÅ kolumnnamn.

Följande syntax visar detta:

CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];

Till exempel:

Vi kommer att använda pristabellen nedan:

Pris:

Låt oss skapa en annan tabell, Price_Audits, där vi loggar ändringarna 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$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql;

Ovanstående funktion infogar en post i tabellen Price_Audits inklusive den nya rad-id och den tid som posten skapas.

Nu när vi har utlösarfunktionen bör vi binda den till vår pristabell. Vi kommer att ge utlösaren namnet price_trigger. Innan en ny post skapas aktiveras utlösarfunktionen automatiskt för att logga ändringarna. Här är utlösaren:

CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();

Låt oss infoga en ny post i pristabellen:

INSERT INTO PriceVALUES (3, 400);

Nu när vi har lagt in en post i pristabellen ska en post också infogas i Price_Audit-tabellen. Detta kommer att vara ett resultat av den utlösare som vi har skapat i pristabellen. Låt oss kontrollera detta:

SELECT * FROM Price_Audits;

Detta returnerar följande:

Utlösaren fungerade framgångsrikt.

Listning triggers

Alla utlösare som du skapar i PostgreSQL lagras i pg_trigger-tabellen. För att se listan med utlösare som du har i databasen, fråga tabellen genom att köra kommandot SELECT som visas nedan:

SELECT tgname FROM pg_trigger;

Detta returnerar följande:

Kolumnen tgname i pg_trigger-tabellen anger namnet på utlösaren.

Släppa triggers

För att släppa en PostgreSQL-utlösare använder vi uttalandet DROP TRIGGER med följande syntax:

DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];

Parameteren trigger-name anger namnet på triggern som ska raderas.

Tabellnamnet anger namnet på tabellen från vilken utlösaren ska raderas.

IF EXISTS-klausulen försöker ta bort en utlösare som finns. Om du försöker ta bort en trigger som inte existerar utan att använda IF EXISTS-satsen får du ett fel.

Alternativet CASCADE hjälper dig att automatiskt släppa alla objekt som är beroende av utlösaren.

Om du använder RESTRICT-alternativet kommer utlösaren inte att raderas om objekt är beroende av det.

Till exempel:

För att ta bort utlösaren med namnet example_trigger på tabellpriset kör vi följande kommando:

För att släppa utlösaren med namnet example_trigger på tabellen Company, kör du följande kommando:

DROP TRIGGER example_trigger IF EXISTSON Company;

Använda pgAdmin

Låt oss nu se hur alla tre åtgärderna utförs med pgAdmin.

Skapa utlösare

För att åstadkomma samma genom pgAdmin, gör detta:

Steg 1) Logga in på ditt pgAdmin-konto.

Steg 2)

  1. Från navigeringsfältet till vänster - Klicka på databaser.
  2. Klicka på Demo.

Steg 3) För att skapa tabellen Price_Audits, skriv frågeditorn:

CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)

Steg 4) Klicka på knappen Kör.

Steg 5) Kör följande kod för att definiera 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

Steg 6) Kör följande kod för att skapa trigger price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()

Steg 7)

  1. Kör följande kommando för att infoga en ny post i pristabellen:
    INSERT INTO PriceVALUES (3, 400)
  2. Kör följande kommando för att kontrollera om en post infogades i tabellen Price_Audits:
    SELECT * FROM Price_Audits

    Detta bör returnera följande:

Steg 8) Låt oss kontrollera innehållet i Price_Audits-tabellen:

Listning triggers

Steg 1) Kör följande kommando för att kontrollera utlösarna i din databas:

SELECT tgname FROM pg_trigger

Detta returnerar följande:

Dropping Triggers

För att släppa utlösaren med namnet example_trigger på tabellen Company, kör du följande kommando:

DROP TRIGGER example_trigger IF EXISTSON Company

Sammanfattning:

  • En PostgreSQL-utlösare avser 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 utlösare existerar bara under hela det databasobjekt som den skapades för.
  • Om databasobjektet raderas kommer utlösaren också att raderas.
  • PostgreSQL-utlösare skapas med CREATE TRIGGER-satsen.
  • Varje utlösare är associerad med en funktion som anger vad utlösaren kommer att göra när den anropas.

Ladda ner databasen som används i denna handledning