2016-05-06 11 views
0

Ich versuche, eine Postgresql-Datenbank auf Ubuntu 16.04 LTS zu betreiben.Postgresql Ubuntu seltsames Verhalten (Versionsinkompatibilität?)

Zuerst installierte ich postgres mit sudo apt-get install postgresql, die Version 9.5.1 installiert. Ich habe dann einen anderen Benutzer und eine neue Datenbank erstellt. Ich habe einem neuen neuen Benutzer alle Berechtigungen für die neue Datenbank erteilt und den Besitzer auch auf den neuen Benutzer festgelegt.

Ich stellte eine Verbindung zur neuen Datenbank her und füllte sie, indem ich eine einfache Sicherungskopie (Dump) aus einer anderen Datenbank (die postgresql Version 9.2 hat) mit \i /path/to/dump.sql erstellte. Ich habe keine Fehler, und als ich dann \dt eintippte, bekam ich die Liste mit den Tabellen.

Das Problem ist: Wenn ich jetzt trennen (\q) und wieder verbinden (das gleiche wie ich vor verbunden, sudo psql -U "username" dbname) und geben Sie \dt wieder, heißt es „Keine Beziehungen gefunden“. Wenn ich versuche, es wieder zu füllen, bekomme ich eine Reihe von Fehlern wie "Beziehung relationname existiert bereits".

Ein anderes Problem/Symptom erscheint, wenn ich versuche, pgAdmin (installiert über sudo apt-get install pgadmin3) zu verwenden. Wenn ich versuche, eine Verbindung über localhost herzustellen, kann ich keine Verbindung mit dem neu erstellten Benutzer herstellen (den ich über das Terminal verbinden kann). Aber ich kann verbinden mit Postgres mit dem Passwort ich über Terminal eingestellt. Ich sehe keine DB ich manuell von der Befehlszeile aus pgAdmin tho erstellen.

Also ja, meine Vermutung ist, dass mindestens ein Problem Version Inkompatibilität zwischen 9.2 und 9.5 sein kann. Gibt es eine Möglichkeit, dies zu testen/zu beheben? Aber ich denke auch, dass es andere Probleme geben sollte.

+0

meine Vermutung, aber haben Sie versucht, auf 9.2 von 9.5 Server Dump tun? Wenn ich auf eine neuere Version migriere, deponiere ich sie immer remote auf einem neueren Server. –

+0

Der umgekehrte Weg. Ich habe eine 9.2 db laufen, die ich mit Plain Dump gesichert. Ich versuche, diesen Speicherauszug auf 9.5 wiederherzustellen. –

+0

Hast du zugesagt? – e4c5

Antwort

1

Was Sie beschreiben, kann passieren, wenn der SQL-Dump einen SET search_path TO...-Befehl enthält, der den Wert auf einen anderen Wert setzt als den, den Ihr Benutzer standardmäßig hat.

Also nicht nur es wird seine Tabellen und andere Objekte in diesem Schema erstellen, aber es wird, dass search_path für den Rest der Sitzung verlassen, so dass, wenn Sie \dt in der gleichen Sitzung zu tun, es sieht und in der Liste die neu geschaffenen Tabellen.

Aber wenn man psql beenden und neu eingeben, diese search_path ist nicht mehr wirksam, sind Sie wieder auf den Standard search_path Ihre Benutzer, die angeblich das Schema nicht erreichen, so \dt nicht mehr „sieht“ jede Tabelle .

Sie können show search_path verwenden, um diese Einstellung in einer psql-Sitzung zu überprüfen, und grep "SET Suchpfad" in der SQL-Datei, um zu überprüfen, wofür sie eingestellt ist.


Per Kommentar, scheint es der Fall zu sein: der Dump erstellt die Tabellen in ein Schema, das außerhalb des Standard-Suchpfades des Benutzers ist.

Eine mögliche Lösung für den reibungslosen Ablauf dieses Benutzers wäre die Aktualisierung seines Suchpfads, so dass er immer zuerst dieses Schema erreicht. Dies kann gemacht werden:

ALTER USER username SET search_path TO schema1,"$user",public; 

wo schema1 ist, was die SQL-Dump bezieht sich auf und wo es die Tabellen erstellt.

+0

Hey, Danke für die Antwort. Ich habe tatsächlich einen Befehl search_path im Dump gefunden. Ich habe auch den "show search_path" direkt nach dem Ausfüllen der DB aus dem Dump überprüft. An diesem Punkt wurde auf den Wert im Dump ("somestring", pg_catalog) gesetzt. Dann habe ich getrennt und wieder verbunden und jetzt zeigt es als "$ user", öffentlich. Können Sie mir sagen, wie ich dieses Problem beheben kann? –

+0

Hey, also ich habe den search_path auf die Datenbank gesetzt, was im Dump eingestellt ist und nun zeigt pgadmin die Tabelle :) Danke! –

+0

@JacobS: Ich habe nur vorgeschlagen, es auf der Benutzerebene in meiner Bearbeitung zu tun, aber das funktioniert auch auf der Datenbankebene. –