Fehlermeldung

Hallo Leute,

Ich bekomme jetzt bei einem SQL Statement immer eine Fehlermeldung:

INSERT INTO gattungen (id_familie,name_gattung,id_bearbeiter) SELECT 94,‘wert gattung’,1

“SQL Error: FEHLER: integer ist außerhalb des gültigen Bereichs”

Leider habe ich jetzt keine Ahnung warum da ein Integer Fehler kommt. 94 sollte ja eigentlich da rein passen, oder?
id_familie (serial) und id_bearbeiter(integer) sind ja Integer. An name_gattung sollte es ja nicht liegen? Bin da jetzt irgendwie überfragt und weiss nicht was ich da übersehe.
Hat hier eventuell jemand eine Idee oder weiss warum dort diese Fehlermeldung kommt?

Vielen lieben Dank
Hanno

Ja. Vermutlich ist das, was Du zeigst, nur ein Teil der Wahrheit. Der andere Teil enthält den Fehler.

Mal abgesehen davon, dass Du kein SELECT für das Einfügen eines Datensatzes brauchtst:

INSERT INTO gattungen (id_familie,name_gattung,id_bearbeiter) 
values (94,'wert gattung',1);

funktioniert das alles wie gewünscht. Siehe das Beispiel hier: SQL Fiddle

Danke für die schnelle Antwort.
Das komplette Insert wäre so.

INSERT INTO gattungen (id_familie,name_gattung,id_bearbeiter) SELECT 94,‘wert gattung’,1 WHERE NOT EXISTS (SELECT id_familie,name_gattung FROM gattungen WHERE id_familie=94 and name_gattung=‘wert gattung’)

Ich wollte damit prüfen ob der Wert existiert und nur dann etwas eintragen wenn es ein neuer Wert ist. Ich bekomme aber trotzdem immer die Fehlermeldung, dass integer ausserhalb des Bereichs ist. Auch wenn ich ich nur den ersten Teil des SQL benutze. Ich hab keine Ahnung warum.

Gruss
Hanno

Ohne die Definition der Tabelle (create table) zu sehen kann niemand Deine Frage beantworten.

oh ja klar,
Sorry. Hier wäre die Tabellendefinition.


CREATE TABLE public.gattungen (
id_gattung serial NOT NULL PRIMARY KEY,
id_familie integer,
name_gattung varchar,
id_bearbeiter integer,
/* Keys /
CONSTRAINT pk_gattungen
PRIMARY KEY (id_gattung),
CONSTRAINT uc_name_gattung
UNIQUE (name_gattung),
/
Foreign keys */
CONSTRAINT fk_bearbeiter_gattungen
FOREIGN KEY (id_bearbeiter)
REFERENCES public.bearbeiter(id_bearbeiter)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_familien
FOREIGN KEY (id_familie)
REFERENCES public.familien(id_familie)
ON DELETE NO ACTION
ON UPDATE NO ACTION
) WITH (
OIDS = FALSE
);

CREATE INDEX fki_bearbeiter_gattungen
ON public.gattungen
(id_bearbeiter);

CREATE INDEX fki_familien
ON public.gattungen
(id_familie);


Vielen Dank
Hanno

Jetzt habe ich gerade den fehler gefunden.
Aus irgendeinem mir unbekannten Grund war die Sequence vom serial auf etwa 30mrd. gesetzt. Das ist dann natürlich ausserhalb des Bereichs. Hab zwar keine Ahnung warum, da eigentlich nur etwa 1500 Werte in der Tabelle drin sind. Aber nachdem ich das zurückgesetzt hab funktioniert es wieder.
Manchmal hilft angestrengtes Starren. :slight_smile:

Vielen Dank für eure Hilfe.
Hanno Rahn