błąd portu postgresql 5433 czy 5432?

128

Zainstalowałem postgresql na OSX. Kiedy uruchamiam psql, otrzymuję

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5433"?

Jednak z / etc / services

postgresql      5432/udp    # PostgreSQL Database
postgresql      5432/tcp    # PostgreSQL Database
#                          Tom Lane <tgl@sss.pgh.pa.us>
pyrrho          5433/tcp    # Pyrrho DBMS
pyrrho          5433/udp    # Pyrrho DBMS

5433 jest zajęte przez pyrrho, 5432 jest przypisane do str. Mogę się połączyć

psql -p 5432

ale dlaczego psql myśli, że to 5433 i jak domyślnie sprawić, by psql wyglądał we właściwym miejscu?

wysoka przepustowość
źródło
5
Sprawdź, czy zmienna środowiskowa PGPORTjest zdefiniowana: postgresql.org/docs/current/static/libpq-envars.html
a_horse_with_no_name

Odpowiedzi:

187

/etc/servicesto tylko wskazówka, jest to lista dobrze znanych portów. Nie oznacza to, że cokolwiek faktycznie działa na tym porcie lub że nazwana usługa będzie działać na tym porcie.

W przypadku PostgreSQL typowe jest używanie portu 5432, jeśli jest dostępny. Jeśli tak nie jest, większość instalatorów wybierze następny wolny port, zwykle 5433.

Możesz zobaczyć, co faktycznie działa za pomocą netstatnarzędzia (dostępne w systemach OS X, Windows i Linux, z różną składnią wiersza poleceń we wszystkich trzech).

Jest to dodatkowo skomplikowane w systemach Mac OS X przez okropny bałagan różnych pakietów PostgreSQL - starożytna wersja PostgreSQL firmy Apple wbudowana w system operacyjny, Postgres.app, Homebrew, Macports, instalator EnterpriseDB itp.

Kończy się tak, że użytkownik instaluje Pg i uruchamia serwer z jednego pakietu, ale używa klienta psqli libpqz innego pakietu. Zwykle dzieje się tak, gdy używają Postgres.app lub homebrew Pg i łączą się z tym, psqlktóry jest dostarczany z systemem operacyjnym. Nie tylko czasami mają one różne porty domyślne, ale Pg dostarczony z Mac OS X ma inną domyślną ścieżkę gniazda unixowego , więc nawet jeśli serwer działa na tym samym porcie, nie będzie nasłuchiwał tego samego gniazda unix.

Większość użytkowników komputerów Mac omija ten problem, używając po prostu tcp / ip z psql -h localhost. W razie potrzeby możesz również określić port, np psql -h localhost -p 5433. Możesz mieć uruchomionych wiele instancji PostgreSQL, więc upewnij się, że łączysz się z właściwą za pomocą select version()i SHOW data_directory;.

Możesz także określić katalog gniazda unixowego; sprawdź unix_socket_directoriesustawienia instancji PostgreSQL, z którą chcesz się połączyć i określ to psql -hnp psql -h /tmp.

Czystszym rozwiązaniem jest poprawienie systemu PATHtak, aby psqli libpqskojarzony z aktualnie używanym PostgreSQL był tym, co znajduje się jako pierwsze w PATH. Szczegóły zależą od wersji systemu Mac OS X i zainstalowanych pakietów Pg. Nie używam Maca i nie mogę podać więcej szczegółów po tej stronie, nie spędzając więcej czasu niż jest to obecnie dostępne.

Craig Ringer
źródło
23

Szybka odpowiedź na OSX, ustaw zmienne środowiskowe.

>export PGHOST=localhost

>export PGPORT=5432

Lub cokolwiek potrzebujesz.

DavidLStacy
źródło
16

Domyślny port Postgres jest zwykle konfigurowany w:

sudo vi /<path to your installation>/data/postgresql.conf

W systemie Ubuntu może to być:

sudo vi /<path to your installation>/main/postgresql.conf

Wyszukaj portw tym pliku.

Risadinha
źródło
W systemie Mac OSX z dystrybucją BigSQL jest tutaj:~/PostgreSQL/data/pg96
Shane
7

Dzięki @a_horse_with_no_name „s komentarzu , zmieniłem definicję PGPORT do 5432 w pg_env.sh. To rozwiązało problem. Nie wiem, dlaczego postgres początkowo ustawił go jako 5433, kiedy hostował usługę pod adresem 5432.

wysoka przepustowość
źródło
7

Wydaje się, że jedną z najczęstszych przyczyn takiego stanu rzeczy jest zainstalowanie nowej wersji PostgreSQL bez zatrzymywania usługi istniejącej instalacji. To też był mój szczególny ból głowy. Przed instalacją lub aktualizacją, szczególnie w systemie OS X i korzystaniu z instalatora jednym kliknięciem z Enterprise DB, przed kontynuowaniem sprawdź stan starej instalacji.

Eron Lloyd
źródło
Tak, zainstalowaliśmy postgresql-9.5, gdy 9.4 był już zainstalowany, więc 9.5 wybrało port 5433 jako domyślny
vikingsteve
Używałem 5432 i 5433 przez długi czas, widziałem 5436, ale nie mam pojęcia, czy to tylko ktoś kreatywny, czy jakiś domyślny na różnych systemach operacyjnych.
Deil
3

Natknąłem się również na ten problem, skończyło się na tym, że miałem dwa serwery postgres działające w tym samym czasie. Odinstalowałem jeden z nich i zmieniłem port z powrotem na 5432 i teraz działa dobrze.

Krazzzeee
źródło
2

Dla mnie w PgAdmin 4 na Mac OS High Sierra , kliknięcie bazy danych PostrgreSQL10 w kolumnie Serwery w lewej kolumnie, a następnie zakładka Właściwości , pokazało port 5433 jako port w obszarze Połączenie . (Nie wiem dlaczego, bo podczas instalacji wybrałem 5432). W każdym razie kliknąłem ikonę Edytuj na karcie Właściwości , zmieniłem ją na 5432 , zapisałem i to rozwiązało problem. Domyśl.

Alan Simpson
źródło
Wszystko, co pozwala na połączenie się z serwerem już działającym na 5432, dlatego można było połączyć się po wykonaniu tej czynności. Jak poprawnie stwierdziłeś, serwer działał na 5432 zgodnie z twoją instalacją.
Shane