jdbc: Realtion existiert nicht

Hallo

Ich connecte mich von meinem Java-Programm aus auf die die PostgresDatenbank.
Das läuft auch alles.

Nur wenn ich eine Select-Anweisung absetze, so kommt die Meldung, dass die Relation nciht existieren würde.
Wenn ich den String jedoch über PGAdmin absetze, stimmt alles.

Weiß einer von euch weiter?

Danke im vorraus.

  • faslche DB, mit der Du connectest
  • falscher SEARCH_PATH


    Du sprichst oben von der Postgres - Datenbank. Hast Du Dir keine eigene DB für Deine Zwecke
    erstellt?

Andreas

Ja, ich habe auf template1 eine eigenen Datenbank erstellt.

Dann habe ich auf meinem Tabelspace ein neues Schema erstellt und dort drin die Tabellen.
Dann sagt mir JDBC, dass das Schema nicht exisitert.
Wenn ich die Tabellen im Public-Schema erstelle, dann kommt die Meldung, dass die Relation nicht exisitiert.

Falsche DB kann nicht sein, da auf meinem Server nur eine Postgres läuft und mein Connection-String lautet auf host:5432/template1/db.

SearchPath steht auf tools (mein eigenes Schema), public.

Aber auch wenn ich die Tabellen mit Schema.Name von Java aus anspreche, bekomme ich den Fehler.

templateX sind ‘Vorlagen’. Dort drin sollte man Dinge erstellen, die man in später erstellten Datenbanken auch immer haben will, z.B. procedurale Sprachen, die man gern nutzt.
Es ist nicht dafür gedacht, dort drin Daten zu speichern. Also, okay, man kann das machen,
aber man sollte eher dafür dann mit createdb oder einer GUI dafür eigene Datenbanken erstellen.

Dann habe ich auf meinem Tabelspace ein neues Schema erstellt und dort drin die Tabellen.

Einem Schema kann man keinen tablespace zuordnen.

Dann sagt mir JDBC, dass das Schema nicht exisitert.
Wenn ich die Tabellen im Public-Schema erstelle, dann kommt die Meldung, dass die Relation nicht exisitiert.

Bitte informier Dich über die einzelnen Begriffe. Eine Datenbank ist ein kompletter Namensraum für sich. Dieser kann wiederum Schemas enthalten. Du kannst z.B. 2 Datenbanken erstellen, DB1 und DB2. In jedem dieser DBs kannst Du Schemas erstellen, z.B. je schema1 und schema2. Da drin wiederum kannst Du Tabellen erstellen. Du kannst nun z.B. in DB1 im Schema1 die Table foo erstellen, und in derselben DB im Schema schema2 eine Table foo. Innerhalb einer DB kannst Du mit dem kompletten Namen alle Tabellen ansprechen, also z.B. schema1.foo und schema2.foo, auch innerhalb z.B. eines SELECTs. Was nicht geht: aus einer DB eine Table in einer anderen DB ansprechen. (Okay, geht auch, via dblink, aber das will man eher nicht)



Falsche DB kann nicht sein, da auf meinem Server nur eine Postgres läuft und mein Connection-String lautet auf host:5432/template1/db.

Bin mir jetzt über die Syntax von Java ned sicher, aber ich vermute mal, du landest so in der DB
template1, Schema db.

SearchPath steht auf tools (mein eigenes Schema), public.

Aber auch wenn ich die Tabellen mit Schema.Name von Java aus anspreche, bekomme ich den Fehler.

Ich an Deiner Stelle würde nun mal schauen, welche Databases es bei Dir gibt. Und zwar mit

psql -l

Dann mit psql mir anschauen, was denn nun wo gelandet ist von Deinen Schemas und Tabellen und so.


Ich weiß, daß viele hier gern mit GUI wie PGAdminIII arbeiten. Das Problem ist aber, daß damit die eigentlichen Abläufe in der DB mehr oder weniger verdeckt werden und dann solche Probleme entstehen. Nein, das soll jetzt kein Flamewar gegen GUI sein, aber es ist nunmal nach meiner Erfahrung sehr sinnvoll, sich (auch) mit den CLI-Tools zu beschäftigen.


Andreas

Ok, danke für deine Hilfe.

Habs jetzt hinbekommen.

Das mit den Begriffen stimmt leider.
Komme von meinem Job her von Oracle.
Jetzt brauch ich fürs Studium Postgres; ist alles noch neu für mich.

Schön.

Das mit den Begriffen stimmt leider.
Komme von meinem Job her von Oracle.
Jetzt brauch ich fürs Studium Postgres; ist alles noch neu für mich.

Schon okay, ich weiß auch ned alles. Dafür gibt es ja die Community.

Andreas