Fehlermeldung bei Ausführung von SQL-Kommandos

rowJoe

Benutzer
Beiträge
8
Hallo zusammen,

ich möchte mir zur Verwaltung meiner Messergebnisse eine Datenbank aufbauen. Den SQL-Code habe ich mit dem DatabaseDesigner von MicroOLAP erstellt. Bei der Auswührung des Codes erhalte ich nun diese beiden Fehlermeldungen und kann damit nichts anfangen - ich hatte mit SQL/Datenbanken noch nie was zu tun.

Könnt ihr mir bitte weiterhelfen? Die beiden Fehlermeldungen scheinen mir auch nach einem Blick in die postgreSQL Doku sehr kryptisch...

Statement #133 executed with error:
PostgreSQL Error Code: (1)
FEHLER: Constraint „Ref_engine_shopvisit_to_module_hpc“ existiert bereits für Relation „engine_shopvisit“
SQL Error Code: 42710
Statement #134 executed with error:
PostgreSQL Error Code: (1)
FEHLER: Constraints für permanente Tabellen dürfen nur auf permanente Tabellen verweisen
SQL Error Code: 42P16


Vielen vielen Dank für eure Hilfe,

Jonas
 
Werbung:
Hallo zusammen,

ich möchte mir zur Verwaltung meiner Messergebnisse eine Datenbank aufbauen. Den SQL-Code habe ich mit dem DatabaseDesigner von MicroOLAP erstellt. Bei der Auswührung des Codes erhalte ich nun diese beiden Fehlermeldungen und kann damit nichts anfangen - ich hatte mit SQL/Datenbanken noch nie was zu tun.

Könnt ihr mir bitte weiterhelfen? Die beiden Fehlermeldungen scheinen mir auch nach einem Blick in die postgreSQL Doku sehr kryptisch...

Statement #133 executed with error:
PostgreSQL Error Code: (1)
FEHLER: Constraint „Ref_engine_shopvisit_to_module_hpc“ existiert bereits für Relation „engine_shopvisit“
SQL Error Code: 42710
Statement #134 executed with error:
PostgreSQL Error Code: (1)
FEHLER: Constraints für permanente Tabellen dürfen nur auf permanente Tabellen verweisen
SQL Error Code: 42P16


Vielen vielen Dank für eure Hilfe,

Jonas


Da wird offenbar ein Constraint definiert (mit einem Namen), wo schon ein gleichnamiger Constraint existiert. Vermutlich führst Du da ein DDL-Script wiederholt aus.

Ohne die Statements zu sehen isses aber auch a bissl schwer diese zu erraten.
 
Nett das du fragst. Seit deiner Antwort bin ich nicht wirklich weiter gekommen und habe mich nun die vergangenen Tage nochmal an die Fehlersuche gemacht. Leider ohne Erfolg. Welche Statements brauchst du denn für die Fehlersuche? Das gesamte SQL-Skript?


Vielen Dank für deine Hilfe!
 
Nett das du fragst. Seit deiner Antwort bin ich nicht wirklich weiter gekommen und habe mich nun die vergangenen Tage nochmal an die Fehlersuche gemacht. Leider ohne Erfolg. Welche Statements brauchst du denn für die Fehlersuche? Das gesamte SQL-Skript?


Vielen Dank für deine Hilfe!

Direkt dringend scheint es ja nicht zu sein ;-)

Schau einfach, was die Befehle, die da genannt werden, versuchen. Die erste Fehlermeldung ist recht eindeutig und kann so demonstriert werden:

Code:
test=# create table master (id int primary key);
CREATE TABLE
test=*# create table slave (id_master int references master);
CREATE TABLE
test=*# \d slave
  Table "public.slave"
  Column  |  Type  | Modifiers
-----------+---------+-----------
 id_master | integer |
Foreign-key constraints:
  "slave_id_master_fkey" FOREIGN KEY (id_master) REFERENCES master(id)

test=*# alter table slave add constraint "slave_id_master_fkey" foreign key (id) references master(id);
ERROR:  constraint "slave_id_master_fkey" for relation "slave" already exists
STATEMENT:  alter table slave add constraint "slave_id_master_fkey" foreign key (id) references master(id);
ERROR:  constraint "slave_id_master_fkey" for relation "slave" already exists

Wie Du den zweitern Fehler schaffst ist mir nicht ganz klar, vielleicht so:

Code:
test=*# create view v_master as select * from master;
CREATE VIEW
test=*# alter table slave add constraint "slave_id_view_master_fkey" foreign key (id) references v_master(id);
ERROR:  referenced relation "v_master" is not a table
STATEMENT:  alter table slave add constraint "slave_id_view_master_fkey" foreign key (id) references v_master(id);
ERROR:  referenced relation "v_master" is not a table

Also, Du versuchst da möglicherweise einen Foreign Key auf einen VIEW zu setzen.

Vielleicht erzeugt Dein 'Designer' da einfach nur Shit... wieviel Tabellen sind das alles zusammen? Ich halt von solchen Tools allgemein nicht viel.
 
Direkt dringend scheint es ja nicht zu sein ;-)
Nunja... eigentlich ist es das schon - eigentlich sollte die Datenbank schon lange laufen...

Vielleicht sollte ich an der Stelle kurz erwähnen, dass ich bisher mit SQL & Co nichts zu tun hatte. Daher habe ich die Datenbank mit grafischer Unterstützung des DatenbankDesigners von MicroOLAP erstellt. Nach der Ausgabe des SQL-Codes bzw. dessen Ausführung gibt er leider nur die Fehlermeldungen aus und das ohne Angabe der Zeile :( Es ist also "irgendwo" in der Datei ein Fehler...

In Summe habe ich 16 Tabellen mit unterschiedlich vielen Spalten. Kann es daran liegen, dass ich in den Tabellen teilweise gleiche Spaltenbezeichnungen habe? Kommt der Fehler evtl. daher?
 
Benutzt du auch die PostgreSQL Version oder vielleicht die für MySQL?
Nein, das ist schon die richtige. Ich habe auch die aktuellste postgres-Version.


Die Codezeilen habe ich leicht ändern müssen um sie hier zu posten - ich hoffe der Fehler ist noch drin. Hier die Code-Zeilen für die Tabelle engine-shopvisit:
--DROP TABLE IF EXISTS "engine_shopvisit" CASCADE;

CREATE TABLE "engine_shopvisit" (
"svID" BIGSERIAL NOT NULL,
"remarks" tid,
"testData_testID" int8 NOT NULL,
"eData_eID" int8 NOT NULL,
"module_hpc_hpc_moduleID" int8 NOT NULL,
"engine_type_enginetypeID" int8 NOT NULL,
"customers_IATA" char(2) NOT NULL,
PRIMARY KEY("svID"),
CONSTRAINT "Ref_engine_shopvisit_to_testData" FOREIGN KEY ("testData_testID")
REFERENCES "testData"("testID")
MATCH SIMPLE
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE,
CONSTRAINT "Ref_engine_shopvisit_to_eData" FOREIGN KEY ("eData_eID")
REFERENCES "eData"("eID")
MATCH SIMPLE
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE,
CONSTRAINT "Ref_engine_shopvisit_to_module_hpc" FOREIGN KEY ("module_hpc_hpc_moduleID")
REFERENCES "module_hpc"("hpc_moduleID")
MATCH SIMPLE
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE,
CONSTRAINT "Ref_engine_shopvisit_to_engine_type" FOREIGN KEY ("engine_type_enginetypeID")
REFERENCES "engine_type"("enginetypeID")
MATCH SIMPLE
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE,
CONSTRAINT "Ref_engine_shopvisit_to_customers" FOREIGN KEY ("customers_IATA")
REFERENCES "customers"("IATA")
MATCH SIMPLE
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE
);
 
Nein, das ist schon die richtige. Ich habe auch die aktuellste postgres-Version.


Die Codezeilen habe ich leicht ändern müssen um sie hier zu posten - ich hoffe der Fehler ist noch drin. Hier die Code-Zeilen für die Tabelle engine-shopvisit:

Nein. Ich bekomme:

Code:
ERROR:  relation "testData" does not exist
Time: 371,235 ms

Aber das ist auch nicht der Punkt. Versuch, das Script in einer leeren (!) DB auszuführen.
 
Aber das ist auch nicht der Punkt. Versuch, das Script in einer leeren (!) DB auszuführen.

Um Fehler durch den bereits ausgeführten Code zu verhindern, hatte ich die Datenbank immer vor dem Ausführen gelöscht und neu angelegt. Die einzelnen Befehle habe ich die Nacht einzeln ausgeführt. Dadurch konnte ich den Fehler auf die drei folgenden Befehle beschränken - alles andere klappt wunderbar.

Code:
-- Zeile 503-508
ALTER TABLE "Modul" ADD CONSTRAINT "fk_Modul_TO_St" FOREIGN KEY ("StID")
   REFERENCES "St"("StID")
   MATCH SIMPLE
   ON DELETE NO ACTION
   ON UPDATE NO ACTION
   NOT DEFERRABLE;

-- Zeile 524-529
ALTER TABLE "Data" ADD CONSTRAINT "fk_Data_TO_Location" FOREIGN KEY ("from")
   REFERENCES "Location"("LocID")
   MATCH SIMPLE
   ON DELETE NO ACTION
   ON UPDATE NO ACTION
   NOT DEFERRABLE;

-- Zeile 531-536
ALTER TABLE "Data" ADD CONSTRAINT "fk_Data_ETM_TO_Location" FOREIGN KEY ("to")
   REFERENCES "Location"("LocID")
   MATCH SIMPLE
   ON DELETE NO ACTION
   ON UPDATE NO ACTION
   NOT DEFERRABLE;

Dabei erhalte ich im pgAdmin Query den Fehler:
FEHLER: Constraints für permanente Tabellen dürfen nur auf permanente Tabellen verweisen
********** Fehler **********

FEHLER: Constraints für permanente Tabellen dürfen nur auf permanente Tabellen verweisen
SQL Status:42P16

Mir ist klar, dass ich beiden unteren Befehle fast gleich sind. In der Tabelle "Data" sind jedoch die beiden Spalten "to" und "from". In diesen sind die Versuchsorte in Form der LocID hinterlegt.

Wie kann man den Fehler hier umgehen und was könnte beim ersten Befehl das Problem sein?


Danke für eure Hilfe!
 
Um Fehler durch den bereits ausgeführten Code zu verhindern, hatte ich die Datenbank immer vor dem Ausführen gelöscht und neu angelegt. Die einzelnen Befehle habe ich die Nacht einzeln ausgeführt. Dadurch konnte ich den Fehler auf die drei folgenden Befehle beschränken - alles andere klappt wunderbar.

Code:
-- Zeile 503-508
ALTER TABLE "Modul" ADD CONSTRAINT "fk_Modul_TO_St" FOREIGN KEY ("StID")
   REFERENCES "St"("StID")
   

-- Zeile 524-529
ALTER TABLE "Data" ADD CONSTRAINT "fk_Data_TO_Location" FOREIGN KEY ("from")
   REFERENCES "Location"("LocID")

-- Zeile 531-536
ALTER TABLE "Data" ADD CONSTRAINT "fk_Data_ETM_TO_Location" FOREIGN KEY ("to")
   REFERENCES "Location"("LocID")

Dabei erhalte ich im pgAdmin Query den Fehler:


Mir ist klar, dass ich beiden unteren Befehle fast gleich sind. In der Tabelle "Data" sind jedoch die beiden Spalten "to" und "from". In diesen sind die Versuchsorte in Form der LocID hinterlegt.

Wie kann man den Fehler hier umgehen und was könnte beim ersten Befehl das Problem sein?


Danke für eure Hilfe!

Die Syntax schaut korrekt aus, die Fehlermeldung bezieht sich auf das Ziel, also auf die Tabellen "St" und "Location". Sind das richtige Tabellen oder vielleicht Views?
 
Views habe ich bisher noch gar nicht eingebaut. Ich habe mehrere Tabellen durch Beziehungen (1:n, n:m) miteinander verbunden - mehr ist noch gar nicht passiert.
 
Views habe ich bisher noch gar nicht eingebaut. Ich habe mehrere Tabellen durch Beziehungen (1:n, n:m) miteinander verbunden - mehr ist noch gar nicht passiert.

Mache das Script bis unmittelbar vor den ersten Fehler, dann ermittelst Du, wie die Tabelle "St" aufgebaut ist. Also in psql eingeben: \d "St", das zeigst Du uns dann.
 
Werbung:
Das hat doch sogar mal geklappt... Hier die Infos über die Tabelle...

Code:
  Ungeloggte Tabelle äpublic.Stô
Spalte |  Typ  |  Attribute
--------+----------+---------------------------------------------------------
StID  | bigint  | not null Vorgabewert nextval('"St_StID_seq"'::regclass)
St  | smallint |
BlID  | bigint  | not null
Indexe:
  "St_pkey" PRIMARY KEY, btree ("StID")
 
Zurück
Oben