PostgreSQL Triggers: creëren, vermelden en neerzetten met voorbeeld
⚡ Slimme samenvatting
PostgreSQL Triggers zijn functies die automatisch worden uitgevoerd wanneer een INSERT-, UPDATE- of DELETE-gebeurtenis plaatsvindt op een tabel. Hierdoor kan de database regels afdwingen, wijzigingen registreren en gegevens controleren zonder dat er extra applicatiecode nodig is.

Waar zit Trigger in? PostgreSQL?
A PostgreSQL Trigger Een trigger is een functie die automatisch wordt geactiveerd wanneer een databasegebeurtenis plaatsvindt op een databaseobject, bijvoorbeeld een tabel. Voorbeelden van databasegebeurtenissen die een trigger kunnen activeren zijn INSERT, UPDATE, DELETE, enzovoort. Bovendien wordt een trigger die is aangemaakt voor een tabel automatisch verwijderd wanneer die tabel wordt verwijderd.
Hoe Trigger wordt gebruikt PostgreSQL?
Een trigger kan tijdens het aanmaken 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 aanmaken ook worden gemarkeerd met de operator FOR EACH STATEMENT. 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:
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 koppelen aan onze prijstabel. We geven de trigger de naam price_trigger. Voordat een nieuw record wordt aangemaakt, wordt de triggerfunctie automatisch aangeroepen om de wijzigingen te registreren. 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 tabel 'Price' hebben ingevoegd, zou er vanwege de trigger die we hebben aangemaakt ook een record in de tabel 'Price_Audits' moeten worden ingevoegd. Laten we dit controleren:
SELECT * FROM Price_Audits;
Dit retourneert het volgende:
De trigger werkte succesvol.
PostgreSQL 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:
De kolom tgname van de tabel pg_trigger geeft de naam van de trigger aan.
PostgreSQL Laat de trekker zakken
Wanneer een trigger niet langer nodig is, kunt u deze net zo gemakkelijk verwijderen. Om een trigger te verwijderen, kunt u dat doen. 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 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 worden uitgevoerd met pgAdmin.
Trigger aanmaken in PostgreSQL met behulp van pgAdmin
Zo maak je een trigger aan in PostgreSQL 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
- Klik in de navigatiebalk aan de linkerkant op Databases.
- Klik op Demo.
Stap 3) Typ de zoekopdracht
Om de tabel Price_Audits te maken, typt u de volgende 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.
Stap 5) Voer het programma uit Code voor auditfunctie
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 het programma uit Code om een trigger te creëren
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
- Voer de volgende opdracht uit om een nieuw record in de prijstabel in te voegen:
INSERT INTO Price VALUES (3, 400)
- 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:
Stap 8) Controleer de tabelinhoud
Laten we de inhoud van de tabel Price_Audits eens bekijken.
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:
Valping Triggers gebruiken 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
Download de database die in deze zelfstudie wordt gebruikt







