Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Fehlermeldung bei Ausführung von SQL-Kommandos

Dieses Thema im Forum "PostgreSQL" wurde erstellt von rowJoe, 4 Dezember 2013.

  1. rowJoe

    rowJoe Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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.
     
  3. akretschmer

    akretschmer Datenbank-Guru


    Bist Du da nun einklich weiter gekommen?
     
  4. rowJoe

    rowJoe Benutzer

    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!
     
  5. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  6. rowJoe

    rowJoe Benutzer

    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?
     
  7. Hony%

    Hony% Datenbank-Guru

    Benutzt du auch die PostgreSQL Version oder vielleicht die für MySQL?
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Nein, schließe ich aus. Zeige mal bitte die Definition von engine_shopvisit.
     
  9. rowJoe

    rowJoe Benutzer

    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
    );
     
  10. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  11. rowJoe

    rowJoe Benutzer

    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:
    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!
     
  12. akretschmer

    akretschmer Datenbank-Guru

    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?
     
  13. rowJoe

    rowJoe Benutzer

    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.
     
  14. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  15. rowJoe

    rowJoe Benutzer

    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")
    
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden