Nie można połączyć się z Postgres na Vagrant Box - połączenie odrzucone?


10

Po pierwsze, jestem nowy w Vagrant i Postgres.

Stworzyłem moją instancję Vagrant przy użyciu http://files.vagrantup.com/lucid32.box bez żadnych problemów. Jestem w stanie uruchomić vagrant upi vagrant sshbez problemu.

Postępowałem zgodnie z instrukcjami z jedną drobną zmianą, zainstalowałem pakiet „postgresql-8.4-postgis” zamiast „postgresql postgresql-contrib”.

Uruchomiłem serwer za pomocą:

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

Po połączeniu z błędną instancją mogę psqlbez problemu łączyć się z instancją.

W moim Vagrantfile już dodałem:

config.vm.forward_port 5432, 5432

ale kiedy próbuję uruchomić psql z localhost otrzymuję:

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

Jestem pewien, że brakuje mi czegoś prostego. Jakieś pomysły?

Aktualizacja:

Znalazłem odniesienie do takiego problemu, a artykuł sugerował użycie:

psql -U postgres -h localhost

dzięki temu otrzymuję:

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

Odpowiedzi:


5

Instrukcje z wpisu na blogu, o którym wspomniałeś, nie są w ogóle odpowiednie dla Ubuntu: używają elementów z instalacji samodzielnie skompilowanego serwera, które nie mieszają się dobrze z wersją spakowaną.

Nie należy tworzyć / usr / local / pgsql / data i uruchamiać initdb do tego katalogu, ponieważ pakiet ubuntu używa /var/lib/postgresql/<pg-version-number>/<cluster-name>i działa initdbw imieniu użytkownika.

Błąd wspominając o „/tmp/.s.PGSQL.5432” pokazuje, że oczekiwana lokalizacja tego pliku jest niepoprawna (dla Ubuntu). Powinno być /var/run/postgresql. Jest to prawdopodobnie spowodowane ręcznym uruchomieniem initdb z parametrami niezgodnymi z ubuntu.

Pliki postgresql.conf i pg_hba.conf do edycji w celu włączenia połączeń nielokalnych powinny znajdować się wewnątrz /etc/postgresql/8.4/main, a nie / usr / local / pgsql / data.

/etc/init.d/postgresql-8.4Powinien zostać uruchomiony przez root (jak wszystko inne w /etc/init.d), a nie przez użytkownika postgres.

PGDATA nie powinna być ustawiana ręcznie, ponieważ to naprawdę przeszkadza w działaniu pakietów postgres Ubuntu.

Moja odpowiedź brzmi: wyczyść i ponownie zainstaluj pakiet postgresql-8.4 bez przestrzegania instrukcji zawartych w poście na blogu. postgresql-8.4-postgis zależy od postgresql-8.4, więc zostanie również usunięty. Upewnij się także, aby cofnąć ustawienie PGDATA w /etc/bash.bashrc.


Ponawiam teraz instalację, ale zauważyłem, że w twojej odpowiedzi sugerujesz, że ścieżka była niewłaściwa, aby Ubuntu szukał niewłaściwego miejsca na plik. Czy może to być spowodowane tym, że klient działa w systemie OSX, gdy serwer jest urządzeniem ubuntu?

Więc zrobiłem ponowną instalację i dostałem dokładnie ten sam błąd. Rozejrzałem się trochę i stwierdził, że nie mam otwartych portów w iptables. Po wykonaniu poniższych instrukcji: cyberciti.biz/tips/howto-iptables-postgresql-open-port.html Jestem w stanie się połączyć.

Nie mogę powiedzieć na pewno, czy ponowna instalacja była częścią poprawki, ale było to zdecydowanie pomocne. Więc daję wam wygraną

Gdy klient i serwery znajdują się na różnych hostach, psql musi zostać wywołany przez psql -h <server> [optional other arguments]gdzie <server> to nazwa hosta lub adres IP (i nie jest localhost) serwera (w tym przypadku pole ubuntu). W pytaniu nie wygląda to tak, jakbyś tak to nazywał, więc zakładałem, że wszystkie polecenia zostały uruchomione na serwerze. W każdym razie jestem naprawdę przekonany, że ponowna instalacja była rozsądnym środkiem, nawet jeśli połączenie mogło zostać nawiązane.

Nazywam to tak: psql -U postgres -h localhost, ponieważ mam konfigurację przekierowywania portów

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.