Verbindung zu Postgres auf Vagrant Box nicht möglich - Verbindung abgelehnt?

10

Zunächst einmal bin ich neu bei Vagrant und Postgres.

Ich habe meine Vagrant-Instanz ohne Probleme mit http://files.vagrantup.com/lucid32.box erstellt . Ich kann laufen vagrant upund vagrant sshohne Probleme.

Ich folgte den Anweisungen mit einer geringfügigen Änderung und installierte das Paket "postgresql-8.4-postgis" anstelle von "postgresql postgresql-contrib".

Ich habe den Server gestartet mit:

postgres@lucid32:/home/vagrant$ /etc/init.d/postgresql-8.4 start

Während ich mit der Vagrant-Instanz verbunden bin, kann ich ohne Probleme psqleine Verbindung zur Instanz herstellen.

In meinem Vagrantfile hatte ich bereits hinzugefügt:

config.vm.forward_port 5432, 5432

aber wenn ich versuche, psql vom localhost aus auszuführen, bekomme ich:

psql: could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Ich bin sicher, ich vermisse etwas Einfaches. Irgendwelche Ideen?

Aktualisieren:

Ich habe einen Verweis auf ein Problem wie dieses gefunden und in dem Artikel vorgeschlagen, Folgendes zu verwenden:

psql -U postgres -h localhost

damit bekomme ich:

psql: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
Greg
quelle

Antworten:

5

Die Anweisungen aus dem von Ihnen erwähnten Blog-Beitrag sind für Ubuntu überhaupt nicht richtig: Sie verwenden Teile aus der Installation eines selbstkompilierten Servers, die sich nicht gut mit einer Paketversion mischen lassen.

Man sollte nicht / usr / local / pgsql / data erstellen und initdb in diesem Verzeichnis ausführen, da das Ubuntu-Paket im Auftrag des Benutzers verwendet /var/lib/postgresql/<pg-version-number>/<cluster-name>und ausgeführt wird initdb.

Der Fehler "/tmp/.s.PGSQL.5432" zeigt an, dass der erwartete Speicherort für diese Datei falsch ist (für Ubuntu). Es sollte in sein /var/run/postgresql. Dies liegt wahrscheinlich daran, dass initdb manuell mit Parametern ausgeführt wird, die nicht mit Ubuntu kompatibel sind.

Die Dateien postgresql.conf und pg_hba.conf, die bearbeitet werden müssen, um nicht lokale Verbindungen zu aktivieren, sollten sich im Inneren befinden /etc/postgresql/8.4/mainund nicht / usr / local / pgsql / data.

Das /etc/init.d/postgresql-8.4sollte von root (wie alles andere in /etc/init.d) gestartet werden, nicht vom Benutzer von postgres.

PGDATA sollte nicht manuell eingestellt werden, da es wiederum die Funktionsweise der Ubuntu-Postgres-Pakete wirklich beeinträchtigt.

Meine Antwort wäre, das postgresql-8.4-Paket zu löschen und neu zu installieren, ohne die Anweisungen aus dem Blog-Beitrag zu befolgen. postgresql-8.4-postgis hängt von postgresql-8.4 ab, daher wird es ebenfalls entfernt. Stellen Sie außerdem sicher, dass Sie die Einstellung von PGDATA in /etc/bash.bashrc rückgängig machen.

Daniel Vérité
quelle
Ich mache die Installation jetzt noch einmal, aber in Ihrer Antwort haben Sie festgestellt, dass der Pfad für Ubuntu falsch war. Suchen Sie an einer falschen Stelle nach einer Datei. Könnte dies daran liegen, dass der Client unter OSX ausgeführt wird, während der Server eine Ubuntu-Box ist?
Also habe ich die Neuinstallation durchgeführt und genau den gleichen Fehler erhalten. Ich sah mich ein bisschen mehr um und stellte fest, dass in iptables keine Ports geöffnet waren. Nachdem Sie die Anweisungen hier befolgt haben: cyberciti.biz/tips/howto-iptables-postgresql-open-port.html Ich kann eine Verbindung herstellen.
Ich kann nicht sicher sagen, ob die Neuinstallation Teil des Fixes war, aber das war definitiv hilfreich. Also gebe ich Ihnen den Sieg
Wenn sich Client und Server auf unterschiedlichen Hosts befinden, muss psql aufgerufen werden, psql -h <server> [optional other arguments]wobei <Server> der Hostname oder die IP-Adresse (und nicht der lokale Host) des Servers ist (in diesem Fall Ubuntu-Box). In der Frage sieht es nicht so aus, als hätten Sie es so aufgerufen, also habe ich angenommen, dass alle Befehle auf dem Server gestartet wurden. Ich bin mir jedenfalls sehr sicher, dass eine Neuinstallation eine vernünftige Maßnahme war, selbst wenn die Verbindung hergestellt werden konnte.
Ich nenne es wie folgt: psql -U postgres -h localhost, da ich ein Vagrant Port Forwarding Setup habe
2

Sie können mein Kochbuch nützlich finden. Ich habe es gerade auf Github gepostet. Es konfiguriert Ubuntu 12.04 LTS mit PostgreSQL 9.1.

rogelio2k
quelle