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?

Questo errore non viene da PostgreSQL — non ha mai visto la connessione. "Connection refused" è il sistema operativo sull'host di destinazione che dice che nulla è in ascolto su quell'indirizzo e porta (o che un firewall ha rifiutato attivamente il pacchetto). Questa distinzione restringe subito la ricerca.

Cosa significa questo errore

Tre modalità di fallimento al momento della connessione sembrano simili ma significano cose diverse:

SintomoSignificato
Connection refusedIl TCP ha raggiunto l'host, nulla in ascolto su quella porta (o firewall REJECT). PostgreSQL non è coinvolto.
Connection timeoutPacchetti scartati silenziosamente — tipicamente un firewall o un security group, o host sbagliato.
no pg_hba.conf entry for host ...Hai davvero raggiunto PostgreSQL; ora è un problema di configurazione dell'autenticazione, un'altra pagina del manuale.

Quindi "Connection refused" significa: posto sbagliato, porta sbagliata, o nessun server in esecuzione lì.

Cause comuni

Come diagnosticarlo

Dal client:

pg_isready -h db.example.com -p 5432

Sull'host del server:

# Il servizio gira?
systemctl status postgresql

# Qualcosa ascolta, e su quale indirizzo/porta?
ss -lntp | grep -E '5432|postgres'

Se il servizio è spento, il motivo dell'avvio fallito è nei log (journalctl -u postgresql o la directory di log di PostgreSQL) — un refuso in postgresql.conf dopo una modifica è un classico. Se gira ma è in bind solo su 127.0.0.1, è listen_addresses.

Come risolverlo