Erstellen von Triggern in PostgreSQL

Das folgende Beispiel zeigt einen Trigger, der bei jedem INSERT in die Tabelle test, den Wert in der Tabelle statistik erhöht. Trigger können in Postgres in verschiedenen Sprachen geschrieben werden, in diesem Beispiel werden wir die prozedurale Sprache PGSQL verwenden. Dazu müssen wir die Sprache der Datenbank bekannt machen.
 CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql'
  HANDLER plpgsql_call_handler
  VALIDATOR plpgsql_validator;
Nach dem erstellen unserer Test Tabelle und der Statistik Tabelle
CREATE TABLE test
(
  id serial NOT NULL,
  CONSTRAINT "pTest" PRIMARY KEY (id)
)
 
CREATE TABLE statistik
(
  tag DATE NOT NULL,
  test INTEGER NOT NULL DEFAULT 0,
  CONSTRAINT "pStatistik" PRIMARY KEY (tag)
)
können wir unsere Triggerfunktion schreiben.
CREATE OR REPLACE FUNCTION count_test()
  RETURNS "trigger" AS
$BODY$
   DECLARE
    COUNT INTEGER;
    right_now DATE;
   BEGIN
 
	right_now := 'now';
 
	SELECT INTO COUNT test FROM statistik WHERE tag = right_now;
 
        IF COUNT ISNULL THEN
		INSERT INTO statistik (tag, test) VALUES (right_now, 1  );
	ELSE
		COUNT := COUNT + 1;
		UPDATE statistik SET test = COUNT WHERE tag = right_now;
        END IF;
 
        RETURN NEW;
    END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
Jetzt müssen wir die Triggerfunktion nur noch unserer Tabelle test zuweisen, und schon wird bei jedem Eintrag in die Tabelle test der Wert in der Tabelle statistik erhöht.
CREATE TRIGGER insert_test
  AFTER INSERT
  ON test
  FOR EACH ROW
  EXECUTE PROCEDURE count_test();

Leave a Reply