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
5. http://www.postgresql.org/docs/9.0/static/triggers.html
Search WWH ::




Custom Search