PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Erreur lors de l'exécution de la commande psql dans /docker-entrypoint-initdb.d/db_init.sh (psql :impossible de se connecter au serveur :connexion refusée)

Il ressemble à ce commit a cassé votre script.

Explication :

PostgreSQL peut accepter des connexions non seulement via TCP/IP, mais aussi via socket UNIX. Le -h localhost l'argument indique psql pour utiliser les connexions TCP plutôt que le socket UNIX.

Si vous examinez le fichier docker-entrypoint.sh version, vous verrez, que lors de l'exécution des scripts dans /docker-entrypoint-initdb.d PostgreSQL n'écoute que sur le socket UNIX et le journal de démarrage indique :

LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

Cela signifie que psql -h localhost ne se connectera pas à la base de données, car PostgreSQL n'écoute pas sur le socket IP. Vous devez utiliser psql sans -h localhost option pour lui faire utiliser le socket UNIX au lieu des connexions TCP.

Mais pourquoi exécuter psql -h localhost fonctionne manuellement ?

Si vous regardez dans le fichier docker-entrypoint.sh encore une fois, vous verrez que lorsque tous les scripts d'initialisation sont exécutés, PostgreSQL est arrêté puis démarré à nouveau en mode normal (opérationnel), dans lequel il écoute à la fois sur les sockets UNIX et IP :

LOG:  listening on IPv4 address "0.0.0.0", port 5432
LOG:  listening on IPv6 address "::", port 5432
LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

Ainsi, lorsque le processus de démarrage est terminé, vous pouvez vous connecter à PostgreSQL à l'aide de connexions TCP, entrant ainsi dans le conteneur et exécutant psql -h localhost réussit.