PostgreSQL: connection refused

psql: error: connection to server at "db.example.com" (10.0.0.12), port 5432 failed: Connection refused
        Is the server running on that host and accepting TCP/IP connections?

Dieser Fehler kommt nicht von PostgreSQL — es hat die Verbindung nie gesehen. "Connection refused" ist das Betriebssystem auf dem Zielhost, das sagt, dass an dieser Adresse und diesem Port nichts lauscht (oder eine Firewall das Paket aktiv abgewiesen hat). Diese Unterscheidung engt die Suche sofort ein.

Was dieser Fehler bedeutet

Drei Fehlermodi zum Verbindungszeitpunkt sehen ähnlich aus, bedeuten aber Unterschiedliches:

SymptomBedeutung
Connection refusedTCP erreichte den Host, nichts lauscht an diesem Port (oder Firewall REJECT). PostgreSQL nicht beteiligt.
Verbindungs-TimeoutPakete stillschweigend verworfen — typischerweise eine Firewall oder Security Group, oder falscher Host.
no pg_hba.conf entry for host ...Sie haben PostgreSQL erreicht; nun ist es ein Authentifizierungs-Konfigurationsproblem, eine andere Seite des Handbuchs.

"Connection refused" bedeutet also: falscher Ort, falscher Port oder dort läuft kein Server.

Häufige Ursachen

So diagnostizieren Sie ihn

Vom Client aus:

pg_isready -h db.example.com -p 5432

Auf dem Server-Host:

# Läuft der Dienst?
systemctl status postgresql

# Lauscht etwas, und auf welcher Adresse/welchem Port?
ss -lntp | grep -E '5432|postgres'

Wenn der Dienst aus ist, steht der Grund für den fehlgeschlagenen Start in den Logs (journalctl -u postgresql oder das PostgreSQL-Log-Verzeichnis) — ein Tippfehler in postgresql.conf nach einer Bearbeitung ist ein Klassiker. Wenn er läuft, aber nur an 127.0.0.1 gebunden ist, ist es listen_addresses.

So beheben Sie ihn