Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
PostgreSQL
Nie mogę połączyć się z PostgreSQL - connection refused
psql, pgAdmin, aplikacja) zwraca connection refused przy próbie połączenia z bazą.listen_addresses), czy port się zgadza i czy nie blokuje go zapora.connection refused myli, bo brzmi jak odmowa logowania - a to błąd znacznie wcześniejszy, jeszcze przed jakimkolwiek sprawdzaniem hasła. Oznacza, że klient w ogóle nie znalazł serwera pod podanym adresem i portem. Ten problem dotyczy każdego, kto łączy się z PostgreSQL z innej maszyny albo z kontenera. Pokazujemy, jak w kilku krokach odróżnić problem sieciowy od problemu z uprawnieniami i jak go usunąć.
Z klienta wiersza poleceń wygląda to tak:
$ psql -h 192.168.1.50 -p 5432 -U app -d sklep
psql: error: connection to server at "192.168.1.50", port 5432 failed:
Connection refused
Is the server running on that host and accepting TCP/IP connections?Kluczowe jest ostatnie pytanie z komunikatu - PostgreSQL sam podpowiada, że albo serwer nie działa, albo nie przyjmuje połączeń TCP/IP. To zupełnie inny problem niż password authentication failed (błąd hasła) czy no pg_hba.conf entry (brak reguły dostępu). Tam serwer już odpowiada, tu jeszcze nie odpowiedział wcale.
connection refused pochodzi z systemu operacyjnego - dostajesz go, gdy pod danym adresem i portem nic nie nasłuchuje albo pakiet został odrzucony. W kontekście PostgreSQL najczęstsze przyczyny to: serwer jest zatrzymany, serwer nasłuchuje tylko na localhost (domyślne listen_addresses = 'localhost'), więc z innej maszyny jest niewidoczny, łączysz się na zły port, albo między klientem a serwerem stoi zapora sieciowa blokująca port 5432. Ważne rozróżnienie - jeśli serwer odpowiada, ale odrzuca regułę dostępu lub hasło, dostaniesz zupełnie inny komunikat. Connection refused zawsze znaczy: do procesu bazy jeszcze nie dotarłeś.
sudo systemctl status postgresql lub pg_isready -h 127.0.0.1.sudo ss -ltnp | grep 5432. Jeśli widzisz tylko 127.0.0.1:5432, serwer nie przyjmie połączeń z sieci.postgresql.conf nasłuch na właściwych interfejsach, na przykład listen_addresses = '*', i zrestartuj serwer (to zmiana wymagająca restartu, nie reload).port w postgresql.conf.sudo ufw status albo sudo firewall-cmd --list-ports. Otwórz port, na przykład sudo ufw allow 5432/tcp, jeśli dostęp ma być z sieci.nc -vz 192.168.1.50 5432 - jeśli i to zawodzi, problem jest czysto sieciowy.Najpierw potwierdź samą drogę sieciową z maszyny klienta - jeśli port jest osiągalny, zobaczysz succeeded:
$ nc -vz 192.168.1.50 5432
Connection to 192.168.1.50 5432 port [tcp/postgresql] succeeded!Potem spróbuj właściwego połączenia. Gdy zamiast connection refused pojawi się prośba o hasło albo błąd dostępu, warstwa sieci działa - dalsze błędy są już z obszaru uprawnień:
$ psql -h 192.168.1.50 -p 5432 -U app -d sklep
Wróć do listy: 100 najczęstszych pytań i problemów z PostgreSQL

Sprawdź szkolenie: Administracja, replikacja i tuning baz danych PostgreSQL
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Sprawdź szkolenie: Zaawansowana administracja PostgreSQL (HA, DR, monitoring, skalowanie)
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...