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

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. For eksempel et bord. Eksempler på databasehændelser, der kan aktivere en trigger, omfatter INSERT, UPDATE, DELETE osv. Når du opretter en trigger for en tabel, vil triggeren desuden blive slettet automatisk, når den tabel slettes.

Hvordan Trigger bruges i PostgreSQL?

En trigger kan markeres med FOR EACH ROW-operatøren under oprettelsen. En sådan trigger vil blive kaldt én gang for hver række, der ændres af operationen. En trigger kan også markeres med FOR EACH STATEMENT-operatøren under oprettelsen. Denne trigger vil kun blive udført é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, bør vi binde den til vores pristabel. Vi vil give triggeren navnet price_trigger. Før en ny post oprettes, aktiveres triggerfunktionen automatisk for at logge ændringerne. Her er udløseren:

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 tabellen Pris, skal en post også indsættes i tabellen Pris_Audit. Dette vil være et resultat af den trigger, som vi har oprettet på pristabellen. Lad os tjekke dette:

SELECT * FROM Price_Audits;

Dette vil returnere følgende:

PostgreSQL Opret Trigger

Udløseren fungerede med succes.

Postgres List Trigger

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:

Postgres List Trigger

Kolonnen tgname i tabellen pg_trigger angiver navnet på triggeren.

Postgres Drop Trigger

At droppe 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 slette triggeren ved navn example_trigger på tabellen Pris, kører vi følgende kommando:

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ørte ved hjælp af pgAdmin.

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

Her er hvordan du kan oprette en trigger i Postgres ved hjælp af pgAdmin:

Trin 1) Log ind på din pgAdmin-konto

Åbn pgAdmin og log ind på din konto ved hjælp af dine legitimationsoplysninger

Trin 2) Opret en demodatabase

  1. Fra navigationslinjen til venstre - Klik på Databaser.
  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 koden for auditfunc

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 koden for at oprette 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)
  2. 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

Slipning af triggere 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

Resumé

  • A PostgreSQL trigger refererer til en funktion, der udløses automatisk, når en databasehændelse opstår på et databaseobjekt, såsom en tabel.
  • Eksempler på sådanne databasehændelser inkluderer INSERT, UPDATE, DELETE osv.
  • En trigger eksisterer kun i løbet af levetiden for det databaseobjekt, som det blev oprettet for.
  • Hvis databaseobjektet slettes, vil triggeren også blive slettet.
  • PostgreSQL triggere oprettes ved hjælp af CREATE TRIGGER-sætningen.
  • Hver trigger er forbundet med en funktion, der angiver, hvad triggeren vil gøre, når den aktiveres.

Download databasen brugt i denne vejledning