Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Delete Trigger mit Kopierfunktion

  1. #1
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard Delete Trigger mit Kopierfunktion

    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)

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.330

    Standard

    Zitat Zitat von OXO Beitrag anzeigen
    Hallo,

    hat jemand schon einmal einen Trigger gebastelt, der die Zeile, die gelöscht wird, in eine Sicherungs-Tabelle überträgt?
    Ja. Viele. Ads zum Beispiel. tablelog. Google kennt die Details.

    Andreas
    --
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard

    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?

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.330

    Standard

    Zitat Zitat von OXO Beitrag anzeigen
    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?
    Du darfst gern eine funktionierende Lösung präsentieren.

    Andreas
    --
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard

    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?

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.330

    Standard

    Zitat Zitat von OXO Beitrag anzeigen
    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
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard

    Ich denke, das wäre super von ihm ;-)

  8. #8
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.018

    Standard

    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

  9. #9
    OXO
    OXO ist offline Neuer Benutzer
    Registriert seit
    14.10.2009
    Beiträge
    17

    Standard

    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...

  10. #10
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.330

    Standard

    Zitat Zitat von OXO Beitrag anzeigen
    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...
    Einfach ein TRIGGER bei Delete, der das macht. Komm schon, Du schaffst das!!einsElf!

    Andreas
    --
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum