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?

Cette erreur ne provient pas de PostgreSQL — il n'a jamais vu la connexion. « Connection refused » est le système d'exploitation de l'hôte cible qui dit que rien n'écoute sur cette adresse et ce port (ou qu'un pare-feu a activement rejeté le paquet). Cette distinction restreint immédiatement la recherche.

Ce que signifie cette erreur

Trois modes d'échec au moment de la connexion se ressemblent mais signifient des choses différentes :

SymptômeSignification
Connection refusedLe TCP a atteint l'hôte, rien n'écoute sur ce port (ou pare-feu REJECT). PostgreSQL pas impliqué.
Connexion timeoutPaquets silencieusement rejetés — typiquement un pare-feu ou un groupe de sécurité, ou un mauvais hôte.
no pg_hba.conf entry for host ...Vous avez atteint PostgreSQL ; c'est désormais un problème de configuration d'authentification, une autre page du manuel.

Donc « Connection refused » signifie : mauvais endroit, mauvais port, ou aucun serveur qui tourne là.

Causes fréquentes

Comment la diagnostiquer

Depuis le client :

pg_isready -h db.example.com -p 5432

Sur l'hôte du serveur :

# Le service tourne-t-il ?
systemctl status postgresql

# Quelque chose écoute-t-il, et sur quelle adresse/quel port ?
ss -lntp | grep -E '5432|postgres'

Si le service est arrêté, la raison de l'échec du démarrage est dans les journaux (journalctl -u postgresql ou le répertoire de journaux de PostgreSQL) — une faute de frappe dans postgresql.conf après une modification est un classique. S'il tourne mais lié à 127.0.0.1 uniquement, c'est listen_addresses.

Comment la corriger