Ergebnis 1 bis 4 von 4

Thema: Fremdschlüsselproblem beim Trigger-Einsatz

  1. #1
    alger ist offline Neuer Benutzer
    Registriert seit
    14.12.2009
    Beiträge
    22

    Standard Fremdschlüsselproblem beim Trigger-Einsatz

    Hallo,

    beim Implementieren einer Historierung für meine Tabellen ist mir aufgefallen, dass die Fremdschlüssel nicht aktualisiert werden. Nachfolgend ist ein Bespiel dazu:

    Code:
    CREATE TABLE t_1 (
           id SERIAL PRIMARY KEY NOT NULL
         , Create_Date TIMESTAMP DEFAULT now()
         , value INTEGER
         , reference_id INTEGER
         , Archvie_Date TIMESTAMP
    );
    
    
    ALTER TABLE t_1  ADD CONSTRAINT FK_t_1_1 FOREIGN KEY (reference_id)
    REFERENCES t_1 (id) ON DELETE CASCADE ON UPDATE CASCADE;
    
    CREATE OR REPLACE FUNCTION _update_t_1()
    RETURNS trigger AS
    $BODY$
    BEGIN
        IF OLD.archive_date IS NOT NULL THEN
              RETURN NULL;
        END IF; 
        IF NEW.archive_date is NULL THEN        
            OLD.reference_id:=OLD.id;
            OLD.archive_date:=now();
            OLD.id:=nextval('t_1_id_seq');
    
            INSERT INTO t_1 SELECT OLD.*;
    
            NEW.create_date:=now();    
        END IF;    
    
        RETURN NEW;
    END;
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE COST 100;
    
    CREATE TRIGGER _update
    BEFORE UPDATE
    ON t_1
    FOR EACH ROW
    EXECUTE PROCEDURE _update_t_1();
    
    INSERT INTO t_1(value) VALUES(10);
    
    vw_test2=# select * from t_1;
     id |       create_date       | value | reference_id | archive_date
    ----+-------------------------+-------+--------------+--------------
      1 | 2010-05-04 13:40:08.484 |    10 |              |
    (1 Zeile)
    
    UPDATE t_1 SET id=30 WHERE id=1;
    
    vw_test2=# select * from t_1;
     id |       create_date       | value | reference_id |      archive_date
    ----+-------------------------+-------+--------------+------------------------
      2 | 2010-05-04 13:47:37.796 |    10 |            1 | 2010-05-04 13:48:22.89
     30 | 2010-05-04 13:48:22.89  |    10 |              |
    (2 Zeilen)
    Was ich jetzt nicht verstehen kann, wieso steht in reference_id immer noch 1 obwohl keine id=1 in der Tabelle mehr vorhanden ist? Warum greifen die Fremdschlüsselbeziehungen nicht? Kann das mir jemand erklären?

    Danke

    Alger

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

    Standard

    Lass dir mal mit RAISE NOTICE ausgeben, welche Teile deines Triggers ausgeführt werden.
    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

  3. #3
    alger ist offline Neuer Benutzer
    Registriert seit
    14.12.2009
    Beiträge
    22

    Standard

    Danke ads, habe verstanden.

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

    Standard

    Und, was war nun das Problem?
    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

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