Database Reference
In-Depth Information
Als Nächstes bauen wir eine Funktion auf, die die alten Daten im Log festhält.
Die Variable
OLD
enthält die zu ändernde Zeile (und
NEW
eine eingehende Zeile,
was wir später noch in Aktion sehen). Bevor wir zurückspringen, geben wir
noch einen Hinweis mit der
event
_
id
in der Console aus.
postgres/log_event.sql
CREATE OR REPLACE
FUNCTION log
_
event() RETURNS
trigger AS
$$
DECLARE
BEGIN
INSERT INTO
logs (event
_
id, old
_
title, old
_
starts, old
_
ends)
VALUES
(OLD.event
_
id, OLD.title, OLD.starts, OLD.ends);
RAISE NOTICE
'Someone just changed event #%'
, OLD.event
_
id;
RETURN NEW;
END
;
$$ LANGUAGE plpgsql;
Abschließend legen wir der Trigger an, der die Änderungen festhält, nachdem
eine Zeile aktualisiert wurde.
CREATE TRIGGER
log
_
events
AFTER
UPDATE ON
events
FOR EACH ROW EXECUTE PROCEDURE log
_
event();
Wie es aussieht, endet unsere Party imRun's House früher als erhofft. Lassen
Sie uns das Event entsprechend ändern.
UPDATE
events
SET
ends=
'2012-05-04 01:00:00'
WHERE
title=
'House Party'
;
NOTICE: Someone just changed event
#9
Und die alte Endzeit wurde im Log festgehalten.
SELECT
event
_
id, old
_
title, old
_
ends, logged
_
at
FROM
logs;
event
_
id | old
_
title | old
_
ends | logged
_
at
---------+-------------+---------------------+------------------------
9 | House Party | 2012-05-04 02:00:00 | 2011-02-26 15:50:31.939
Trigger können auch vor Updates und vor oder nach Inserts eingerichtet wer-
den.
5