PostgreSQL Triggers: creëren, vermelden en neerzetten met voorbeeld

Waar zit 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 Trigger wordt gebruikt PostgreSQL?

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

PostgreSQL Maak Trigger aan

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 voor een INSERT-bewerking moet worden gemaakt, moeten we de kolomnaamparameter ON toevoegen.

De volgende syntaxis illustreert dit:

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

PostgreSQL Triggervoorbeeld maken

We gebruiken de onderstaande prijstabel:

Prijs:

PostgreSQL Maak Trigger aan

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 retourneert het volgende:

PostgreSQL Maak Trigger aan

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 terug:

Postgres-lijsttrigger

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

Postgres Drop-trigger

Om een ​​te laten vallen PostgreSQL trigger gebruiken we de DROP TRIGGER-instructie met de volgende 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 uit de tabel Price te verwijderen, voeren we de volgende opdracht uit:

Om de trigger met de naam example_trigger op de tabel Company te plaatsen, voert u de volgende opdracht uit:

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 aanmaken in PostgreSQL met behulp van 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.

Trigger maken in PostgreSQL met behulp van 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

Trigger maken in PostgreSQL met behulp van pgAdmin

Stap 5) Voer de code voor auditfunc uit

Voer de volgende code uit 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 de volgende code uit 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 de volgende opdracht uit om een ​​nieuw record in de prijstabel in te voegen:
    INSERT INTO Price
    VALUES (3, 400)
  2. Voer de volgende opdracht uit om te controleren of er een record is ingevoegd in de tabel Price_Audits:
    SELECT * FROM Price_Audits

    Dit zou het volgende moeten retourneren:

Trigger maken in PostgreSQL met behulp van pgAdmin

Stap 8) Controleer de tabelinhoud

Laten we de inhoud van de Price_Audits-tabel controleren:

Triggers weergeven met pgAdmin

Stap 1) Voer de volgende opdracht uit om de triggers in uw database te controleren:

SELECT tgname FROM pg_trigger

Dit geeft het volgende terug:

Triggers weergeven met pgAdmin

Triggers verwijderen met pgAdmin

Om de trigger met de naam example_trigger op de tabel Company te plaatsen, voert u de volgende opdracht uit:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Samenvatting

  • A 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 instructie CREATE TRIGGER.
  • 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