PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Erro ao executar o comando psql em /docker-entrypoint-initdb.d/db_init.sh (psql:não foi possível conectar ao servidor:Conexão recusada)


Parece este commit quebrou seu script.

Explicação:

O PostgreSQL pode aceitar conexões não apenas via TCP/IP, mas também via socket UNIX. O -h localhost argumento diz ao psql usar conexões TCP em vez do soquete UNIX.

Se você olhar para o atual docker-entrypoint.sh versão, você verá que durante a execução de scripts em /docker-entrypoint-initdb.d O PostgreSQL escuta apenas no soquete UNIX e o log de inicialização diz:
LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

Isso significa que psql -h localhost não se conectará ao banco de dados, pois o PostgreSQL não escuta no soquete IP. Você deve usar psql sem -h localhost opção para fazê-lo usar soquete UNIX em vez de conexões TCP.

Mas por que executar psql -h localhost funciona manualmente?

Se você olhar para o docker-entrypoint.sh novamente, você verá que quando todos os scripts de inicialização são executados, o PostgreSQL está sendo interrompido e então iniciado novamente no modo normal (operacional), no qual ele escuta nos soquetes UNIX e 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"

Assim, quando o processo de inicialização estiver completo, você pode se conectar ao PostgreSQL usando conexões TCP, entrando no container e executando psql -h localhost tem sucesso.