Triggers

Het kan wenselijk zijn de database enkele acties uit te laten voeren op het moment dat er “iets” gebeurt met een tabel. Dat “iets” is bijvoorbeeld een INSERT, UPDATE of DELETE. In PostgreSQL kun je werken met triggers welke afgaan op een bepaalde gebeurtenis, ook wel event genoemd.

Stel dat we een reservering toevoegen, daarbij is het van groot belang dat de aankomstdatum vóór de vertrekdatum ligt (logisch toch). Je bouwt deze check natuurlijk in je applicatie, maar wat nu als je daar een fout maakt? Zou je het ook niet liever op je database vastleggen? Die is daar namelijk veel beter in en werkt ook nog als je aanpassingen maakt aan je applicatie of nog erger: als andere applicaties, waar je bijvoorbeeld geen invloed op hebt, gebruik maken van je database.

Een trigger roept altijd een functie aan, zoals reeds bekend schrijven we de functies in PL/pgSQL:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
CREATE OR REPLACE FUNCTION check_reservering() RETURNS TRIGGER AS
'
BEGIN
  IF( NEW.datum_aankomst > NEW.datum_vertrek ) THEN
    RAISE EXCEPTION ''Aankomstdatum moet voor vertrekdatum liggen'';
  END IF;
  
  RETURN NEW;
END;
'
LANGUAGE 'plpgsql';


De functie is vrij eenvoudig van opzet, een IF-constructie controleert of de aankomstdatum groter is als de vertrekdatum, als dit het geval is wordt er een error gegenereerd, zo niet returned de functie netjes zijn trigger en wordt de wijziging / toevoeging aangebracht.

Om de triggerfunctie nu nog aan een tabel te koppelen dient de daadwerkelijke trigger nog aangemaakt te worden, dit kan met het volgende statement:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
CREATE TRIGGER trigger_check_reservering
  BEFORE INSERT OR UPDATE
  ON reservering
  FOR EACH ROW
  EXECUTE PROCEDURE check_reservering();


Je ziet hier dat ik de trigger afvuur vóór een INSERT of UPDATE, bij deze events mogen we in de aangeroepen trigger-functie gebruik maken van de variabele NEW. Dit is een zgn. ROWTYPE-variabele en bevat te velden van het nieuwe record welke je gaat invoeren of bijwerken.

Meer informatie over triggers vind je op http://www.postgresql.org/docs/8.1/static/plpgsql-trigger.html.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Voorbeeld-case
  3. Overerving in PostgreSQL
  4. Aanmaken van tabellen en het leggen van relaties
  5. Views
  6. PL/pgSQL functies en procedures
  7. Triggers
  8. Check constraints en domains
  9. Conclusie

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.