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.

  • Definitie: Een trigger is een functie die automatisch wordt aangeroepen bij een gebeurtenis in de database, zoals INSERT, UPDATE of DELETE.
  • 🔁 Domein: FOR EACH ROW voert de trigger één keer per betreffende rij uit, terwijl FOR EACH STATEMENT deze één keer per bewerking uitvoert.
  • Maken: Met CREATE TRIGGER koppel je een functie aan een tabel en stel je de timing in op BEFORE, AFTER of INSTEAD OF.
  • 📋 Lijst: Gebruik de query SELECT tgname op de pg_trigger-catalogus om alle triggers in de database te bekijken.
  • 🗑️ Drop: DROP TRIGGER verwijdert een trigger, en IF EXISTS voorkomt een fout als deze ontbreekt.
  • 🤖 AI-hulp: AI-assistenten genereren triggerfuncties en suggereren een timing VOOR of NA op basis van een eenvoudige vraag.

PostgreSQL triggers

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:

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

PostgreSQL Maak Trigger aan

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:

PostgreSQL Lijsttrigger

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

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

Trigger maken in PostgreSQL met behulp van pgAdmin

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

  1. Voer de volgende opdracht uit om een ​​nieuw record in de prijstabel in te voegen:
INSERT INTO Price
VALUES (3, 400)
  1. 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 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:

Triggers weergeven met pgAdmin

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

Veelgestelde vragen

Een BEFORE-trigger wordt uitgevoerd voordat de wijziging in de rij wordt opgeslagen, zodat de rij kan worden aangepast of afgewezen. Een AFTER-trigger wordt uitgevoerd nadat de wijziging is opgeslagen, wat geschikt is voor logboekregistratie en audittaken.

Een INSTEAD OF-trigger wordt gedefinieerd op een view, niet op een tabel. Deze vervangt de INSERT-, UPDATE- of DELETE-bewerkingen door aangepaste logica, waardoor een alleen-lezen view beschrijfbaar wordt.

Triggerfuncties worden doorgaans in PL/pgSQL geschreven. PostgreSQL ondersteunt ook PL/PythonPL/Perl, PL/Tcl en C, zodat je de taal kunt kiezen die het beste bij je logica past.

Gebruik ALTER TABLE table-name DISABLE TRIGGER trigger-name om de trigger uit te schakelen en ENABLE TRIGGER om deze weer in te schakelen. Dit voorkomt dat de trigger wordt verwijderd.ping en het opnieuw creëren van de trigger tijdens bulkloads.

Ja. Elke trigger voegt werk toe aan elke betrokken rij of instructie, dus complexe triggerlogica kan schrijfbewerkingen vertragen. Houd triggerfuncties kort en indexeer alle kolommen die ze opvragen.

Ja. Als een trigger een andere tabel wijzigt die ook triggers bevat, worden die triggers ook geactiveerd, waardoor er een cascade van triggers ontstaat. PostgreSQL Beperkt de nestdiepte om oneindige lussen te voorkomen.

AI-codeerassistenten zetten een verzoek in gewone taal om in een complete CREATE TRIGGER-instructie en triggerfunctie, suggereren een BEFORE- of AFTER-timing en leggen de gegenereerde PL/pgSQL uit voor snelle controle.

Ja. Tools zoals pgai en GPT-gebaseerde assistenten vertalen een beschreven regel naar trigger-SQL en kunnen INSERT-triggers bouwen die automatisch nieuwe gegevens labelen of valideren zodra deze binnenkomen.

Vat dit bericht samen met: