PostgreSQL CREATE TRIGGER

Sammanfattning: I den här handledningen lär du dig hur du använder PostgreSQL CREATE TRIGGER-anvisningen för att skapa en trigger.

För att skapa en ny trigger i PostgreSQL följer du de här stegen:

  • För det första skapar du en triggerfunktion med CREATE FUNCTION-anvisning.
  • För det andra binder du triggerfunktionen till en tabell med hjälp av CREATE TRIGGER-anvisningen.

Om du inte är bekant med att skapa en användardefinierad funktion kan du kolla in PL/pgSQL-avsnittet.

Skapa syntax för triggerfunktionen

En triggerfunktion liknar en vanlig användardefinierad funktion. En triggerfunktion tar dock inte emot några argument och har ett returvärde med typen trigger.

Nedan illustreras syntaxen för att skapa en triggerfunktion:

Code language: SQL (Structured Query Language) (sql)

Observera att du kan skapa en triggerfunktion med hjälp av alla språk som stöds av PostgreSQL. I den här handledningen kommer vi att använda PL/pgSQL.

En triggerfunktion tar emot data om sin anropande miljö genom en speciell struktur som kallas TriggerData och som innehåller en uppsättning lokala variabler.

Till exempel representerar OLD och NEW tillstånden för raden i tabellen före eller efter den utlösande händelsen.

PostgreSQL tillhandahåller även andra lokala variabler som föregås av TG_ såsom TG_WHEN och TG_TABLE_NAME.

När du har definierat en utlösarfunktion kan du binda den till en eller flera utlösarhändelser såsom INSERT, UPDATE och DELETE.

Introduktion till PostgreSQL CREATE TRIGGER-anvisningen

Anvisningen CREATE TRIGGER skapar en ny trigger. Följande illustrerar den grundläggande syntaxen för CREATE TRIGGER-anvisningen:

Code language: SQL (Structured Query Language) (sql)

I den här syntaxen:

Först anger du namnet på utlösaren efter TRIGGER-nyckelorden.

Först anger du tidpunkten som gör att utlösaren utlöses. Det kan vara BEFORE eller AFTER en händelse inträffar.

Tredje, ange den händelse som åberopar utlösaren. Händelsen kan vara INSERT , DELETE, UPDATE eller TRUNCATE.

Fjärde, ange namnet på den tabell som är associerad med utlösaren efter nyckelordet ON.

Femte, ange typen av utlösare som kan vara:

  • Utlösare på radnivå som specificeras av FOR EACH ROW-klausulen.
  • Utlösare på statusnivå som specificeras av FOR EACH STATEMENT-klausulen.

En utlösare på radnivå utlöses för varje rad medan en utlösare på utsaganivå utlöses för varje transaktion.

Antag att en tabell har 100 rader och två utlösare som utlöses när en DELETE-händelse inträffar.

Om DELETE-uttalandet raderar 100 rader utlöses utlösaren på radnivå 100 gånger, en gång för varje raderad rad. Å andra sidan kommer en utlösare på statementnivå att utlösas en gång oavsett hur många rader som tas bort.

Slutligen anger du namnet på utlösarfunktionen efter nyckelorden EXECUTE PROCEDURE.

PostgreSQL CREATE TRIGGER exempel

Följande anvisning skapar en ny tabell som heter employees:

Code language: SQL (Structured Query Language) (sql)

Antag att när namnet på en anställd ändras vill du logga ändringarna i en separat tabell som heter employee_audits :

Code language: SQL (Structured Query Language) (sql)

Skapa först en ny funktion som heter log_last_name_changes:

Code language: SQL (Structured Query Language) (sql)

Funktionen infogar det gamla efternamnet i tabellen employee_audits inklusive medarbetar-id, efternamn och tidpunkt för ändringen om en anställds efternamn ändras.

OLD representerar raden före uppdatering medan NEW representerar den nya raden som kommer att uppdateras. OLD.last_name returnerar efternamnet före uppdateringen och NEW.last_name returnerar det nya efternamnet.

För det andra binder du triggerfunktionen till tabellen employees. Utlösarnamnet är last_name_changes. Innan värdet i kolumnen last_name uppdateras anropas triggerfunktionen automatiskt för att logga ändringarna.

Code language: SQL (Structured Query Language) (sql)

För det tredje infogar du några rader i tabellen employees:

Code language: SQL (Structured Query Language) (sql)

För det fjärde undersöker du innehållet i tabellen employees:

Code language: SQL (Structured Query Language) (sql)

Förutsätt att Lily Bush ändrar sitt efternamn till Lily Brown.

Femte, uppdatera Lilys efternamn till det nya:

Code language: SQL (Structured Query Language) (sql)

Sjunde, kontrollera om Lilys efternamn har uppdaterats:

Code language: SQL (Structured Query Language) (sql)

Som du kan se i utmatningen har Lilys efternamn uppdaterats.

Attonde, kontrollera innehållet i tabellen employee_audits:

Code language: SQL (Structured Query Language) (sql)

Förändringen loggades i tabellen employee_audits av utlösaren.

I den här handledningen har du lärt dig hur du använder PostgreSQL CREATE TRIGGER för att skapa en ny trigger.

  • Har den här handledningen varit till hjälp?
  • JaNej

Lämna ett svar

Din e-postadress kommer inte publiceras.