PostgreSQL-trigger: voorbeeld maken, neerzetten

Inhoudsopgave:

Anonim

Wat zijn Postgresql-triggers?

Een PostgreSQL-trigger is een functie die automatisch wordt geactiveerd wanneer zich een databasegebeurtenis voordoet op een databaseobject. Bijvoorbeeld een tafel.

Voorbeelden van databasegebeurtenissen die een trigger kunnen activeren zijn INSERT, UPDATE, DELETE, enz. Bovendien, wanneer u een trigger voor een tabel maakt, wordt de trigger automatisch verwijderd wanneer die tabel wordt verwijderd.

In deze PostgreSQL-zelfstudie leert u het volgende:

  • Wat zijn Postgresql-triggers?
  • Hoe wordt de trigger gebruikt in POSRGREQL?
  • Een trigger maken
  • Met behulp van pgAdmin
  • Triggers laten vallen

Hoe wordt de trigger gebruikt in POSRGREQL?

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

Een trigger maken

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

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

De triggernaam is de naam van de trigger.

De BEFORE, AFTER en INSTEAD OF zijn sleutelwoorden die bepalen wanneer de trigger wordt aangeroepen.

De gebeurtenisnaam is de naam van de gebeurtenis die ervoor zorgt dat de trigger wordt aangeroepen. Dit kan INSERT, UPDATE, DELETE, etc. zijn.

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 parameter ON kolomnaam toevoegen.

De volgende syntaxis laat dit zien:

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

Bijvoorbeeld:

We zullen de onderstaande prijstabel gebruiken:

Prijs:

Laten we een andere tabel maken, Price_Audits, waar we de wijzigingen in de prijstabel zullen loggen:

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$BEGININSERT 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 het nieuwe rij-ID en de tijd waarop het record is gemaakt.

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

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

Laten we een nieuw record in de prijstabel invoegen:

INSERT INTO PriceVALUES (3, 400);

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

SELECT * FROM Price_Audits;

Dit levert het volgende op:

De trigger werkte met succes.

Lijsttriggers

Alle triggers die u in PostgreSQL maakt, worden opgeslagen in de tabel pg_trigger. Om de lijst met triggers te zien die u in de database hebt, vraagt ​​u de tabel op door de SELECT-opdracht uit te voeren, zoals hieronder wordt weergegeven:

SELECT tgname FROM pg_trigger;

Dit levert het volgende op:

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

Triggers laten vallen

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

DROP TRIGGER [IF EXISTS] trigger-nameON 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 een trigger probeert te verwijderen die niet bestaat zonder de IF EXISTS-clausule te gebruiken, krijgt u een foutmelding.

De CASCADE-optie helpt u om alle objecten die afhankelijk zijn van de trigger automatisch te laten vallen.

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

Bijvoorbeeld:

Om de trigger met de naam example_trigger op tafelprijs te verwijderen, voeren we de volgende opdracht uit:

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

DROP TRIGGER example_trigger IF EXISTSON Company;

Met behulp van pgAdmin

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

Triggers maken

Om hetzelfde te bereiken met pgAdmin, doe je dit:

Stap 1) Log in op uw pgAdmin-account.

Stap 2)

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

Stap 3) Om de tabel Price_Audits te maken, typt u de query-editor:

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

Stap 4) Klik op de knop Uitvoeren.

Stap 5) Voer de volgende code uit om de functie auditfunc te definiëren:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql

Stap 6) Voer de volgende code uit om de trigger price_trigger te maken:

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

Stap 7)

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

    Dit zou het volgende moeten retourneren:

Stap 8) Laten we de inhoud van de Price_Audits-tabel controleren:

Lijsttriggers

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

SELECT tgname FROM pg_trigger

Dit levert het volgende op:

Triggers laten vallen

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

DROP TRIGGER example_trigger IF EXISTSON Company

Overzicht:

  • Een PostgreSQL-trigger verwijst naar een functie die automatisch wordt geactiveerd wanneer zich een databasegebeurtenis voordoet op een databaseobject, zoals een tabel.
  • Voorbeelden van dergelijke databasegebeurtenissen zijn INSERT, UPDATE, DELETE, etc.
  • 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 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