Tachchen mal wieder!!!
Habe mal Wieer eine Frage…
Ich versuche einen Trigger zu schreiben (in pl/pgsql) der mir bei eiem Update auf der einen Tabelle, die Daten in eine History_Tabelle schreibt( aber nur wenn die alten Daten gegenüber den neuen Daten unterschiedlich sind). Als PK(oder UNIQUE) der History_Tabelle will ich den Timestamp nehmen.
CODE der beiden Tabellen:
CREATE TABLE “public”.“pcstandort” (
“hostname” VARCHAR(30) NOT NULL,
“geb” VARCHAR(5) NOT NULL,
“raum” VARCHAR(6) NOT NULL,
CONSTRAINT “gebaeude_pkey” PRIMARY KEY(“hostname”, “geb”, “raum”),
CONSTRAINT “pcstandort_fk” FOREIGN KEY (“hostname”)
REFERENCES “public”.“lastlogin”(“hostname”)
ON DELETE CASCADE
ON UPDATE NO ACTION
NOT DEFERRABLE
) WITHOUT OIDS;
CREATE TRIGGER “pcstandort_histo_tr” BEFORE UPDATE
ON “public”.“pcstandort” FOR EACH ROW
EXECUTE PROCEDURE “public”.“pcstandorthisto”();
BEGIN
if raum <> old.raum and geb <> old.geb THEN
INSERT into public.pcstandort_histo(timestampadd,hostname,geb,raum) VALUES(TIMESTAMP,old.hostname,old.geb,old.raum)
return NEW;
end if;
END;
CREATE TABLE “public”.“pcstandort_histo” (
“hostname” VARCHAR(30),
“geb” VARCHAR(5),
“raum” VARCHAR(6),
“timestampadd” TIMESTAMP WITHOUT TIME ZONE NOT NULL,
CONSTRAINT “pcstandort_histo_gebaeude_pkey” PRIMARY KEY(“timestampadd”)
) WITHOUT OIDS;
Mit NEW… gibt es probs
Hatte ein Bsp. im Netz gefunden…
Bsp CODE
\
> CREATE TRIGGER "table_trigger_histo" AFTER UPDATE
> ON "public"."table_inv" FOR EACH ROW
> EXECUTE PROCEDURE "public"."table_function_histo"();
>
> CREATE OR REPLACE FUNCTION "public"."table_function_histo" () RETURNS
> trigger AS'
> BEGIN
> INSERT INTO table_histo
> (
> inv_id,
> modell_id,
> ...
> ) VALUES (
> old.inv_id,
> old.modell_id,
> old. ....
> )
RETURN NEW;
> end;
Konnte leider diese Bsp. nicht nutzen, weil edliche Syntax-Fehler da waren(außer die ganze "......" Geschichte, weil so schlau war ich auch.