Hallo,
ich hab folgendes ausprobiert, bekomme aber immer den Fehler
Code:unterminated dollar-quoted string at or near "$$Was mache ich hier denn falsch? Ich habe im PostgreSQL Handbuch gelesen, dass die Werte OLD/NEW etc. automatisch generiert werden. Ich hoffe, dass das dann funktionieren kann, so wie ich das spezifiziert habe!?Code:CREATE OR REPLACE FUNCTION funktion() RETURNS VOID AS $$ BEGIN INSERT INTO table_2 VALUES (OLD.id, OLD.title, OLD.name); END; $$ LANGUAGE plpgsql; CREATE TRIGGER t_copy_on_delete AFTER DELETE ON table_1 FOR EACH ROW EXECUTE PROCEDURE funktion ();
Du möchtest TRIGGER als Rückgabewert statt VOID nutzen.
Du möchtest deine Spalten in deinem Trigger benennen.
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
First of all, thank you for your repsonse.
Zu Punkt 1)
Okay, danke!
Code:CREATE OR REPLACE FUNCTION funktion() RETURNS TRIGGER AS ...
Zu Punkt 2)
Verstehe Deine Antwort noch nicht ganz, meinst Du so?
Code:... INSERT INTO table_2 (id, title, name) SELECT OLD.id, OLD.title, OLD.name FROM OLD; ...
Zu 2) Ja.
Hintergrund: irgendwann ändert sich vielleicht der Aufbau der Tabelle. Ab dem Moment schlägt dein Trigger garantiert fehl, wenn du die Spalten nicht angibst.
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
Okay!
Nur, ich vermute der Fehler ist mit dem
"unterminated dollar-quoted string"
kommt nicht daher. Ich hatte das heute mal mit RETURN AS TRIGGER schon mal kurz ausprobiert. Da gings dann auch nicht. Nur bin ich mir nicht mehr ganz sicher, ob da nicht dann ein anderer Fehler in der INSERT-Zeile angeprangert wurde und die fehlende Spaltenangabe der Grund war.
Ich werds morgen mal ausprobieren und dann berichten, wie es ausgegangen ist! Vielen Dank schon mal!
Nun, nachdem ich von VOID auf TRIGGER gewechselt hatte, konnte ich die Funktion von dir mittels Copy&Paste erstellen.
Von daher hast du entweder woanders ein Problem oder irgendwas falsch kopiert. Jedenfalls ist der Fehler bei mir nicht aufgetreten.
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
Super, das hört sich gut an! Dann hoff ich mal das Beste !! ;-)
Danke nochmal für die Unterstützng!
akretschmer schickt dir dann morgen die Rechnung ;-)
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
Hi,
damit auch später mal noch jemand von unserer Diskussion profitieren kann. Es hat bei mir wie folgt funktioniert mit dem Trigger bei gelöschten Zeilen:
1) Kopier-Funktion
2) TriggerCode:CREATE OR REPLACE FUNCTION copy_deleted_row() RETURNS trigger AS $$ begin INSERT INTO table_deleted_rows(col_1, col_2, ..., col_n) SELECT OLD.col_1, OLD.col_2, ..., OLD.col_n; RETURN OLD; end $$ LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
Ich hoffe, das hilft weiter!Code:CREATE TRIGGER t_save_deleted_rows AFTER DELETE ON my_table FOR EACH ROW EXECUTE PROCEDURE copy_deleted_row();
Danke nochmals an alle für die Unterstützung!
oderCode:CREATE OR REPLACE FUNCTION row_backup RETURNS trigger AS $BODY$ BEGIN INSERT INTO <backuptable> VALUES(OLD.*); RETURN OLD; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE
INSERT INTO <backuptable> VALUES (OLD);
Geändert von symbiont (24.11.2009 um 12:26 Uhr)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen