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