Rules mit automatischer "ID"-Erhöhung

Dies ist mein erster Eintrag hier im Forum, daher will ich erstmal “Hallo” sagen. Im Rahmen meines Studiums beschäftige ich mich zur Zeit mit dem Datenbanksystem PostgreSQL und habe eine Frage zu den Rules. Ich habe eine View auf eine Tabelle erstellt.

CREATE VIEW view_namen AS SELECT * FROM namen

In der Tabelle Namen steht nur eine ID “NamenID” (Datentyp: serial) und “Namen” (Datentyp: varchar) . Nun würde ich gerne neue Datensätze über die View eintragen lassen. Das Problem ist jedoch das ich die ID auch jedes Mal neu eintragen muss, wenn ich die Regel folgendermaßen anlege:

CREATE RULE view_namen_insert ASON INSERT TO view_namen
DO INSTEAD
INSERT INTO fachbereich
VALUES(NEW.namenid,NEW.namen);

Wenn ich das NEW.namenid weglasse, bekomme ich die Fehlermeldung das NEW.namen nicht vom Typ integer ist. Wenn ich es so lasse, muss ich jedoch immer die ID angeben, was mit der Zeit natürlich sehr umständlich ist.

Ich würde mich freuen, wenn mir jemand weiterhelfen kann. Vielleicht habe ich grade auch einfach nur eine Blockade im Kopf und komme nicht weiter, aber das muss man doch auf jedenfall besser lösen konnen?

Gruß Ulti

Hi,

Du hast 2 Möglichkeiten:

-- Mit DEFAULT arbeiten:
CREATE RULE view_namen_insert ASON INSERT TO view_namen
DO INSTEAD
INSERT INTO fachbereich
VALUES(DEFAULT,NEW.namen);

-- oder die Spalten benennen die du befüllen willst:
CREATE RULE view_namen_insert ASON INSERT TO view_namen
DO INSTEAD
INSERT INTO fachbereich(namen)
VALUES(NEW.namen)

HTH
hkocam

hi,

wenn du eine Table mit einem Field “serial” anlegst “müsste” du ein Hinweis bekommen

… erstellt implizit eine Sequenz »TableName___record_seq« für die »serial«-Spalte »nodes.__record«

diese “Sequenz” nimmst du nun um ein Field Type “serial” per

NextVal('TableName___record_seq')

zu inkrementieren.

Erst einmal vielen Dank an euch beiden! Ich merke schon ich stand wirklich auf dem Schlauch. So wie es in der zweiten Möglichkeit von hkocam gelöst wurde, habe ich es eigentlich auch gelernt. Aber irgendwie hatte ich wohl ein Brett vor dem Kopf!

Habe mir trotzdem mal die erste Möglichkeit nochmal angeguckt, das wollte er aber nicht annehmen, weil er trotzdem beim Inserten meint, dass ich keine Zahl als erstes eingebe?

Die Möglichkeit von Ohr werde ich mir aber gleich auch nochmal anschauen!

Hallo,

bitte zeig das doch mal konkret am Beispiel, am besten eine omplette psql-Session inkl. Fehlermeldung hier in Code-tags gebettet.

vg hkocam

Hallo,

alles klar. Ich nehme alles zurück. Keine Ahnung was ich gestern gemacht habe, aber als ich es nun grade mit DEFAULT getestet habe, lief es doch. Vielleicht habe ich mich auch gestern irgendwo vertippt. Auf jedenfall vielen Dank für die Hilfe!

Gruß Ulti