Hallo,
hat jemand schon einmal einen Trigger gebastelt, der die Zeile, die gelöscht wird, in eine Sicherungs-Tabelle überträgt?
Ich hab also eine Tabelle für die Sicherung mit den entsprechenden Feldern/Spalten vorbereitet.
Dann kommt das CREATE TRIGGER mit der BEFORE DELETE-Option von PostgreSQL zum Einsatz, dort soll man eine Funktion spezifizieren.
CREATE OR REPLACE FUNCTION myfunction() RETURNS trigger AS
'
BEGIN
INSERT INTO my_table VALUES(...);
END
'
LANGUAGE plpgsql;
CREATE TRIGGER name BEFORE DELETE ON tabelle FOR EACH ROW
EXECUTE PROCEDURE myfunction ();
Wie lege ich das denn in dieser Funktion fest, dass auch die gelöschten Werte in die neu angelegte Tabelle geschrieben werden? Ich dachte zunächst, dass ich in der Funktion ein SQL INSERT-Statement absetze, aber aber wie referenziere ich mich da auf die gelöschte Zeile??
Falls jemand schon mal so ein DELETE-Trigger gemacht hat, oder ein Beispiel hat, wäre ich sehr dankbar!!
Geändert von OXO (20.10.2009 um 19:51 Uhr)
--
PostgreSQL Hosting
http://www.amazon.de/gp/registry/2APKFICAIYMWBads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
https://www.xing.com/profile/Andreas_Kretschmer7
Das benötigt ja zusätzliche C-Funktionen.
Wie würde das denn aussehn, wenn man anstelle der Procedure eine Function aufruft. Diese Funktion würde dann zum Beispiel einen Parameter vom Typ Table aufnehmen, wenn das irgendwie geht und dann könnte man in dem INSERT-Statement der Funktion die gelöschten Werte referenzieren, oder nicht?
--
PostgreSQL Hosting
http://www.amazon.de/gp/registry/2APKFICAIYMWBads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
https://www.xing.com/profile/Andreas_Kretschmer7
Naja, das Posting hier ist ja nicht umsonst entstanden ;-)
Hätte ich das hinbekommen, hätte ich nicht schreiben müssen.
Heisst das, dass man es ohne C-Funktionen auch nicht hinbekommt?
Ads hat IIRC damals C genommen, weil mit z.B. plpgsql einige wesentliche Dinge nicht realisierbar waren. Dies hat sich mit 8.3 oder 8.4 gebessert, soweit ich weiß überlegt ads, das (vielleicht) mal mit plpgsql zu machen. Aber ich will da nicht ihm das Wort aus dem Mund nehmen, er wird sich ganz, ganz sicher dazu noch melden. ads: *wink*
Andreas
--
PostgreSQL Hosting
http://www.amazon.de/gp/registry/2APKFICAIYMWBads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
https://www.xing.com/profile/Andreas_Kretschmer7
Ich denke, das wäre super von ihm ;-)
Ja, da bin ich.
plpgsql beherrscht immer noch ein sehr wesentliches Detail nicht, um das ganze relativ einfach zu implementieren.
Mittlerweile ließe sich zwar eine Lösung basteln, aber das wird wirklich eine Bastelei: dafür ist selbstmodifizierender Code notwendig.
Daher wird es wohl weiterhin bei der C-Funktion bleiben. Alternativ könnte man so etwas auch in pl/Perl, pl/PHP oder was auch immer schreiben.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Das hört sich nicht gerade berauschend an. Ich kann nicht unbedingt was auf dem Server installieren und sollte eigntlich nur kurz die gesamte Zeile die gelöscht wurde in die andere Tabelle kopieren, ohne weitere/zusätzliche Funktionalität.
Mist, jetzt bin ich irgendwie verwirrt, was man da machen kann...
--
PostgreSQL Hosting
http://www.amazon.de/gp/registry/2APKFICAIYMWBads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
https://www.xing.com/profile/Andreas_Kretschmer7
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen