PostgreSQL-triggers: creëren, vermelden en neerzetten met voorbeeld

Wat is Trigger in PostgreSQL?

A PostgreSQL-trigger is een functie die automatisch wordt geactiveerd wanneer een databasegebeurtenis plaatsvindt op een databaseobject. Bijvoorbeeld een tafel. Voorbeelden van databasegebeurtenissen die een trigger kunnen activeren zijn INSERT, UPDATE, DELETE, etc. Wanneer u bovendien een trigger voor een tabel maakt, wordt de trigger automatisch verwijderd wanneer die tabel wordt verwijderd.

Hoe wordt Trigger gebruikt in PostgreSQL?

Een trigger kan tijdens het maken ervan worden gemarkeerd met de operator FOR EACH ROW. Een dergelijke trigger wordt één keer aangeroepen voor elke rij die door de bewerking wordt gewijzigd. Een trigger kan tijdens het maken ervan ook worden gemarkeerd met de operator FOR EACH STATEMENT. Deze trigger wordt slechts één keer uitgevoerd voor een specifieke bewerking.

PostgreSQL-trigger maken

Om een ​​trigger te maken, gebruiken we de CREATE TRIGGER-functie. Hier is de syntaxis voor de functie:

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

De triggernaam is de naam van de trigger.

De BEFORE, AFTER en INSTEAD OF zijn trefwoorden die bepalen wanneer de trigger wordt geactiveerd.

De gebeurtenisnaam is de naam van de gebeurtenis die ervoor zorgt dat de trigger wordt aangeroepen. Dit kan zijn INSERT, UPDATEN, VERWIJDEREN, enz.

De tabelnaam is de naam van de tabel waarop de trigger moet worden gemaakt.

Als de trigger moet worden gemaakt voor een INSERT-bewerking, moeten we de kolomnaamparameter ON toevoegen.

De following syntaxis laat dit zien:

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

PostgreSQL Trigger-voorbeeld maken

We gebruiken de onderstaande prijstabel:

Prijs:

PostgreSQL-trigger maken

Laten we nog een tabel maken, Price_Audits, waarin we de wijzigingen in de prijstabel zullen vastleggen:

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

We kunnen nu een nieuwe functie definiëren met de naam 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;

De bovenstaande functie voegt een record in de tabel Price_Audits in, inclusief de nieuwe rij-ID en het tijdstip waarop de record is aangemaakt.

Nu we de triggerfunctie hebben, moeten we deze aan onze prijstabel koppelen. We geven de trigger de naam price_trigger. Voordat er een nieuw record wordt aangemaakt, wordt automatisch de triggerfunctie aangeroepen om de wijzigingen te loggen. Hier is de trigger:

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

Laten we een nieuw record in de prijstabel invoegen:

INSERT INTO Price 
VALUES (3, 400);

Nu we een record in de Prijstabel hebben ingevoegd, moet er ook een record in de Price_Audit-tabel worden ingevoegd. Dit is het resultaat van de trigger die we in de prijstabel hebben gemaakt. Laten we dit controleren:

SELECT * FROM Price_Audits;

Dit zal het volgende opleverenwing:

PostgreSQL-trigger maken

De trigger werkte succesvol.

Postgres-lijsttrigger

Allemaal triggers die je aanmaakt PostgreSQL worden opgeslagen in de pg_trigger-tabel. Om de lijst met triggers te zien die u op de databank, voer een query uit op de tabel door de opdracht SELECT uit te voeren, zoals hieronder weergegeven:

SELECT tgname FROM pg_trigger;

Dit geeft het volgende resultaatwing:

Postgres-lijsttrigger

De kolom tgname van de tabel pg_trigger geeft de naam van de trigger aan.

Postgres Drop-trigger

Om een ​​PostgreSQL-trigger te verwijderen, gebruiken we de DROP TRIGGER-instructie met de following syntaxis:

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

De parameter trigger-name geeft de naam aan van de trigger die moet worden verwijderd.

De tabelnaam geeft de naam aan van de tabel waaruit de trigger moet worden verwijderd.

De IF EXISTS-clausule probeert een bestaande trigger te verwijderen. Als u probeert een trigger te verwijderen die niet bestaat zonder de IF EXISTS-clausule te gebruiken, krijgt u een foutmelding.

Met de CASCADE-optie kunt u alle objecten die afhankelijk zijn van de trigger automatisch laten vallen.

Als u de optie RESTRICT gebruikt, wordt de trigger niet verwijderd als er objecten van afhankelijk zijn.

Bijvoorbeeld:

Om de trigger met de naam example_trigger in tabel Price te verwijderen, voeren we het volgende uitwing opdracht:

Als u de trigger met de naam example_trigger in de tabel Bedrijf wilt neerzetten, voert u het volgende uitwing opdracht:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Gebruik pgAdmin

Laten we nu eens kijken hoe alle drie de acties werden uitgevoerd met pgAdmin.

Trigger maken in PostgreSQL met pgAdmin

Hier ziet u hoe u een trigger in Postgres kunt maken met behulp van pgAdmin:

Stap 1) Log in op uw pgAdmin-account

Open pgAdmin en log in op uw account met uw inloggegevens

Stap 2) Maak een demodatabase

  1. Klik in de navigatiebalk aan de linkerkant op Databases.
  2. Klik op Demo.

Maak een trigger in PostgreSQL met pgAdmin

Stap 3) Typ de zoekopdracht

Om de tabel Price_Audits te maken, typt u de query in de editor:

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

Stap 4) Voer de query uit

Klik op de knop Uitvoeren

Maak een trigger in PostgreSQL met pgAdmin

Stap 5) Voer de code voor auditfunc uit

Voer het volgende uitwing code om de functie auditfunc te definiëren:

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

Stap 6) Voer de code uit om een ​​trigger te maken

Voer het volgende uitwing code om de trigger price_trigger te maken:

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

Stap 7) Voeg een nieuw record in

  1. Voer het volgende uitwing opdracht om een ​​nieuw record in de prijstabel in te voegen:
    INSERT INTO Price
    VALUES (3, 400)
  2. Voer het volgende uitwing opdracht om te controleren of een record in de Price_Audits-tabel is ingevoegd:
    SELECT * FROM Price_Audits

    Dit zou de follo moeten retournerenwing:

Maak een trigger in PostgreSQL met pgAdmin

Stap 8) Controleer de tabelinhoud

Laten we de inhoud van de Price_Audits-tabel controleren:

Triggers weergeven met pgAdmin

Stap 1) Voer het volgende uitwing commando om de triggers in uw database te controleren:

SELECT tgname FROM pg_trigger

Dit geeft het volgende resultaatwing:

Triggers weergeven met pgAdmin

Triggers verwijderen met pgAdmin

Als u de trigger met de naam example_trigger in de tabel Bedrijf wilt neerzetten, voert u het volgende uitwing opdracht:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Samengevat

  • Een PostgreSQL-trigger verwijst naar een functie die automatisch wordt geactiveerd wanneer een databasegebeurtenis plaatsvindt op een databaseobject, zoals een tabel.
  • Voorbeelden van dergelijke databasegebeurtenissen zijn INSERT, UPDATE, DELETE, enz.
  • Een trigger bestaat alleen tijdens de levensduur van het databaseobject waarvoor deze is gemaakt.
  • Als het databaseobject wordt verwijderd, wordt de trigger ook verwijderd.
  • PostgreSQL-triggers worden gemaakt met behulp van de CREATE TRIGGER-instructie.
  • Elke trigger is gekoppeld aan een functie die aangeeft wat de trigger zal doen wanneer deze wordt aangeroepen.

Download de database die in deze zelfstudie wordt gebruikt