ich versuche gerade krampfhaft einen Trigger zuschreiben. Es geht darum, das ich aus einem VB Skript Daten stumpf in die DB schreiben will. Nun kommt es aber vor, das Datensätze mehrmal vorkommen. Nun will ich aber, das die DB entscheidet, ob es ein Insert oder Update macht(um das Skrikt nicht noch größer werden zu lassen).
Der Trigger soll nun erst in der Tabelle nachsehen ob der Datensatz da ist oder nicht.
Code der Tabelle:
CREATE TABLE “public”.“product” (
“hostname” VARCHAR(15) NOT NULL,
“displayname” VARCHAR(80) NOT NULL,
“installdate” VARCHAR(15),
“displayversion” VARCHAR(25),
“insertdate” DATE NOT NULL,
CONSTRAINT “product_pkey” PRIMARY KEY(“hostname”, “displayname”, “insertdate”)
) WITHOUT OIDS;
Habe Ihr einen Vorschlag???
Code für den Trigger sollte richtig sein, aber wie soll dann die Funktion aussehen?
CREATE TRIGGER “product_tr” BEFORE INSERT OR UPDATE
ON “public”.“product” FOR EACH ROW
EXECUTE PROCEDURE “public”.“insertupdate”();
wofür einen Trigger? Die Eindeutigkeit eines Datensatzen wird durch den PRIMARY KEY bestimmt. Wenn Du zweiten Datensatz mit gleichen PRIMARY KEY einfügen willst, wird eine Fehlermeldung erzeugt, die Du mit deinem VB-Script doch abfangen kannst.
okay mit der Auswertung der Fehlermeldung hast recht, aber wenn ich das mit einem Trigger lösen könnte, kann ich eine ganze Menge an Zeilen in meinem Skript rausschmeißen und es wird auch wieder übersichtlicher.
so ganz verständlich ist Deine Antwort nicht, da Du oben schreibst:
Der Trigger soll nun erst in der Tabelle nachsehen ob der Datensatz da ist oder nicht
Einfacher wie die von mir vorgeschlagen Methode geht es nicht mehr, da durch den PRIMARY KEY nur eindeutige Datensätze sichergestellt sind.
Wie eine Triggerfunktion aufgebaut ist kannst Du hier http://www.pg-forum.de/viewtopic.php?t=306&highlight= nachlesen. Zusätzlich solltest Du dir Kapitel “38.10 Triggerprozeduren” im deutschen Handbuch anschauen. Hier sind verschieden Variable erklärt, die Du in der Triggerfunktion unbedingt benötigst.
Beachte aber, dass die Ausgabe des Buches aus dem Jahre 2003 stammt und sich seitdem einiges in PostgreSQL geändert hat. Maßgebend sollte für dich immer die englische Original-Dokumentation sein. Die Beschreibung der Variable findest Du dort im Kapitel 36.10.
Ein weiteres Online-Buch in englischer Sprache gibt es hier: