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();
Erstellen von Triggern in PostgreSQL