PostgreSQL Udløsere: Opret, liste og slip med eksempel

⚡ Smart opsummering

PostgreSQL Triggere er funktioner, der kører automatisk, når en INSERT-, UPDATE- eller DELETE-hændelse udløses på en tabel, hvilket giver databasen mulighed for at håndhæve regler, logge ændringer og revidere data uden ekstra applikationskode.

  • Definition: En trigger er en funktion, der kaldes automatisk ved en databasehændelse, f.eks. INSERT, UPDATE eller DELETE.
  • 🔁 Anvendelsesområde: FOR EACH ROW kører triggeren én gang pr. berørt række, mens FOR EACH STATUS kører den én gang pr. operation.
  • 🛠️ Skab: CREATE TRIGGER binder en funktion til en tabel og angiver timingen FØR, EFTER eller I STEDET FOR.
  • ???? Liste: Forespørg pg_trigger-kataloget med SELECT tgname for at se alle triggere i databasen.
  • 🗑️ Drop: DROP TRIGGER fjerner en trigger, og IF EXISTS forhindrer en fejl, når den mangler.
  • 🤖 AI-hjælp: AI-assistenter genererer triggerfunktioner og foreslår FØR- eller EFTER-timing ud fra en anmodning i et letforståeligt sprog.

PostgreSQL Udløser

Hvad er Trigger i PostgreSQL?

A PostgreSQL Udløser er en funktion, der udløses automatisk, når en databasehændelse opstår på et databaseobjekt, f.eks. en tabel. Eksempler på databasehændelser, der kan aktivere en trigger, omfatter INSERT, UPDATE, DELETE osv. Desuden, når du opretter en trigger for en tabel, vil triggeren automatisk blive fjernet, når tabellen slettes.

Hvordan Trigger bruges i PostgreSQL?

En trigger kan markeres med FOR EACH ROW-operatoren under oprettelsen. En sådan trigger kaldes én gang for hver række, der ændres af operationen. En trigger kan også markeres med FOR EACH STATEM-operatoren under oprettelsen. Denne trigger udføres kun én gang for en specifik operation.

PostgreSQL Opret Trigger

For at oprette en trigger bruger vi funktionen CREATE TRIGGER. Her er syntaksen for funktionen:

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

Triggernavnet er navnet på triggeren.

FØR, EFTER og I stedet for er nøgleord, der bestemmer, hvornår triggeren vil blive aktiveret.

Hændelsesnavnet er navnet på den hændelse, der vil få triggeren til at blive aktiveret. Dette kan være INSERT, OPDATERING, SLET osv.

Tabelnavnet er navnet på den tabel, som triggeren skal oprettes på.

Hvis triggeren 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-name
ON table-name
[
 -- Trigger logic
];

PostgreSQL Opret triggereksempel

Vi vil bruge pristabellen nedenfor:

Pris:

PostgreSQL Opret Trigger

Lad os oprette en anden tabel, Price_Audits, hvor vi logger ændringerne i pristabellen:

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$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql;

Ovenstående funktion vil indsætte en post i tabellen Price_Audits inklusive det nye række-id og tidspunktet for oprettelsen af ​​posten.

Nu hvor vi har triggerfunktionen, skal vi binde den til vores Price-tabel. Vi giver triggeren navnet price_trigger. Før en ny post oprettes, vil triggerfunktionen automatisk blive kaldt for at logge ændringerne. Her er triggeren:

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

Lad os indsætte en ny post i pristabellen:

INSERT INTO Price
VALUES (3, 400);

Nu hvor vi har indsat en post i Price-tabellen, skal der også indsættes en post i Price_Audits-tabellen på grund af den trigger, vi oprettede. Lad os tjekke dette:

SELECT * FROM Price_Audits;

Dette vil returnere følgende:

PostgreSQL Opret Trigger

Udløseren fungerede med succes.

PostgreSQL Listeudløser

Alle triggere, som du opretter i PostgreSQL er gemt i pg_trigger-tabellen. For at se listen over triggere, som du har på database, forespørg tabellen ved at køre SELECT-kommandoen som vist nedenfor:

SELECT tgname FROM pg_trigger;

Dette returnerer følgende:

PostgreSQL Listeudløser

Kolonnen tgname i tabellen pg_trigger angiver navnet på triggeren.

PostgreSQL Drop Trigger

Når en udløser ikke længere er nødvendig, kan du fjerne den lige så nemt. For at slippe en PostgreSQL trigger, bruger vi DROP TRIGGER-sætningen med følgende syntaks:

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

Trigger-name parameteren angiver navnet på den trigger, der skal slettes.

Tabelnavnet angiver navnet på den tabel, hvorfra triggeren skal slettes.

IF EXISTS-sætningen forsøger at slette en trigger, der eksisterer. Hvis du forsøger at slette en trigger, der ikke eksisterer uden at bruge IF EXISTS-sætningen, får du en fejl.

CASCADE-indstillingen hjælper dig med automatisk at slippe alle objekter, der afhænger af triggeren.

Hvis du bruger RESTRICT-indstillingen, slettes triggeren ikke, hvis objekter er afhængige af den.

For eksempel:

For at slippe triggeren ved navn example_trigger på tabellen Company skal du køre følgende kommando:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Bruger pgAdmin

Lad os nu se, hvordan alle tre handlinger udføres ved hjælp af pgAdmin.

Sådan opretter du trigger i PostgreSQL ved hjælp af pgAdmin

Sådan kan du oprette en trigger i PostgreSQL ved hjælp af pgAdmin:

Trin 1) Log ind på din pgAdmin-konto

Åbn pgAdmin og log ind på din konto med dine loginoplysninger.

Trin 2) Opret en demodatabase

  1. Klik på Databaser i navigationslinjen til venstre.
  2. Klik på Demo.

Opret trigger i PostgreSQL ved hjælp af pgAdmin

Trin 3) Indtast forespørgslen

For at oprette tabellen Price_Audits skal du skrive forespørgslen i editoren:

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

Trin 4) Udfør forespørgslen

Klik på knappen Udfør.

Opret trigger i PostgreSQL ved hjælp af pgAdmin

Trin 5) Kør Code til revisionsfunktion

Kør følgende kode for at definere 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

Trin 6) Kør Code at skabe trigger

Kør følgende kode for at oprette trigger price_trigger:

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

Trin 7) Indsæt en ny post

  1. Kør følgende kommando for at indsætte en ny post i pristabellen:
INSERT INTO Price
VALUES (3, 400)
  1. Kør følgende kommando for at kontrollere, om en post blev indsat i tabellen Price_Audits:
SELECT * FROM Price_Audits

Dette skulle returnere følgende:

Opret trigger i PostgreSQL ved hjælp af pgAdmin

Trin 8) Tjek tabelindholdet

Lad os tjekke indholdet af tabellen Price_Audits.

Listeudløsere ved hjælp af pgAdmin

Trin 1) Kør følgende kommando for at kontrollere triggerne i din database:

SELECT tgname FROM pg_trigger

Dette returnerer følgende:

Listeudløsere ved hjælp af pgAdmin

Dropping Udløsere ved hjælp af pgAdmin

For at slippe triggeren ved navn example_trigger på tabellen Company skal du køre følgende kommando:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Download databasen brugt i denne vejledning

Ofte Stillede Spørgsmål

En BEFORE-trigger kører, før ændringen i rækken skrives, så den kan ændre eller afvise rækken. En AFTER-trigger kører, efter ændringen er gemt, hvilket er egnet til logføring og revisionsopgaver.

En INSTEAD OF-trigger defineres i en visning, ikke i en tabel. Den erstatter INSERT, UPDATE eller DELETE med brugerdefineret logik, hvilket gør en skrivebeskyttet visning skrivbar.

Triggerfunktioner skrives normalt i PL/pgSQL. PostgreSQL understøtter også PL/Python, PL/Perl, PL/Tcl og C, så du kan vælge det sprog, der passer til din logik.

Brug ALTER TABLE table-name DISABLE TRIGGER trigger-name for at slå den fra, og ENABLE TRIGGER for at tænde den igen. Dette undgår tab af kommandoen.ping og genskabe udløseren under bulkindlæsninger.

Ja. Hver trigger tilføjer arbejde til hver berørt række eller sætning, så tung triggerlogik kan forsinke skrivninger. Hold triggerfunktioner korte, og indekser alle kolonner, de forespørger på.

Ja. Hvis en trigger ændrer en anden tabel, der også har triggere, aktiveres disse også, hvilket skaber kaskaderende triggere. PostgreSQL begrænser indlejringsdybden for at forhindre uendelige løkker.

AI-kodningsassistenter omdanner en anmodning i letforståeligt sprog til en komplet CREATE TRIGGER-sætning og triggerfunktion, foreslår FØR- eller EFTER-timing og forklarer den genererede PL/pgSQL til hurtig gennemgang.

Ja. Værktøjer som pgai og GPT-baserede assistenter oversætter en beskrevet regel til trigger-SQL og kan bygge INSERT-triggere, der automatisk tagger eller validerer nye data, når de ankommer.

Opsummer dette indlæg med: