Ã?nderungen protokollieren (PostgreSQL/Trigger)
Posted: 2003-06-22 10:23
Hallo zusammen,
In einer Datenbank habe ich eine Tabelle, bei der ich alle Ã?nderungen mitloggen muss. Da man unterschiedlich auf die Datenbank zugreifen kann (Web, Batch...), will ich das Loggen direkt in der Datenbank machen und nicht einem externen Programm überlassen.
Meine Tabelle sieht in etwa so aus:
card_holder(foo, bar, last_changed, last_changed_by);
last_changed_by hält den Benutzernamen der Person, die an der Software angemeldet ist; dieser Login ist aber != Postgresuser. Und genau das ist mein Problem.
Meine Logtabelle (card_holder_history) ist identisch mit card_holder und hat zusätzlich noch ein Feld Action.
Mein Trigger reagiert auf INSERT, UPDATE und DELETE. Bei INSERT und UPDATE funktioniert auch alles bestens, Action wird mit INSERT bzw. UPDATE belegt und die restlichen Daten dann identisch in beide Tabellen eingetragen.
Wenn ich aber jetzt ein DELETE absetzte habe ich das Problem, dass ja bei DELETE das Feld last_changed_by (=Username) nicht belegt ist (last_changed ist einfach die Systemzeit) und somit der Trigger nicht funktioniert.
Langer Reder kurzer Sinn.
Wie kann ich mit obiger Konstellation auch beim Löschen den Benutzernamen in die Logtabelle eintragen?
Es sollte also so eine Zeile in die History eingetragen werden:
card_holder_history(NULL,NULL,'2003-06-22 10:22', 'phisch', 'DELETE');
Oder gibt es vielleicht andere/bessere Ansätze, um derartiges Loggen zu machen?
Danke schonmal.
phisch
In einer Datenbank habe ich eine Tabelle, bei der ich alle Ã?nderungen mitloggen muss. Da man unterschiedlich auf die Datenbank zugreifen kann (Web, Batch...), will ich das Loggen direkt in der Datenbank machen und nicht einem externen Programm überlassen.
Meine Tabelle sieht in etwa so aus:
card_holder(foo, bar, last_changed, last_changed_by);
last_changed_by hält den Benutzernamen der Person, die an der Software angemeldet ist; dieser Login ist aber != Postgresuser. Und genau das ist mein Problem.
Meine Logtabelle (card_holder_history) ist identisch mit card_holder und hat zusätzlich noch ein Feld Action.
Mein Trigger reagiert auf INSERT, UPDATE und DELETE. Bei INSERT und UPDATE funktioniert auch alles bestens, Action wird mit INSERT bzw. UPDATE belegt und die restlichen Daten dann identisch in beide Tabellen eingetragen.
Wenn ich aber jetzt ein DELETE absetzte habe ich das Problem, dass ja bei DELETE das Feld last_changed_by (=Username) nicht belegt ist (last_changed ist einfach die Systemzeit) und somit der Trigger nicht funktioniert.
Langer Reder kurzer Sinn.
Wie kann ich mit obiger Konstellation auch beim Löschen den Benutzernamen in die Logtabelle eintragen?
Es sollte also so eine Zeile in die History eingetragen werden:
card_holder_history(NULL,NULL,'2003-06-22 10:22', 'phisch', 'DELETE');
Oder gibt es vielleicht andere/bessere Ansätze, um derartiges Loggen zu machen?
Danke schonmal.
phisch