Hallo,
beim Implementieren einer Historierung für meine Tabellen ist mir aufgefallen, dass die Fremdschlüssel nicht aktualisiert werden. Nachfolgend ist ein Bespiel dazu:
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?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)
Danke
Alger
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
Danke ads, habe verstanden.
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
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen