PostgreSQL não conecta: erros comuns e como resolver
Quando o PostgreSQL recusa uma conexão, a mensagem de erro já indica a causa: "FATAL: password authentication failed" é senha errada; "could not connect to server" é porta bloqueada ou processo parado; "no pg_hba.conf entry" é permissão de rede ausente. Cada diagnóstico tem um comando específico — veja abaixo.
Diagnóstico: verificar se o PostgreSQL está rodando
Antes de qualquer outra coisa, confirme que o processo está ativo e escutando na porta correta:
# Status do container PostgreSQL
docker compose ps postgres
# Logs recentes do container
docker compose logs postgres --tail=30
# Verificar se a porta 5432 está sendo escutada
ss -tlnp | grep 5432
# Testar conexão local (de dentro da VPS)
docker compose exec postgres psql -U postgres -c "SELECT version();"Causa 1: autenticação falhou (senha incorreta)
"FATAL: password authentication failed for user" significa que o usuário existe mas a senha está errada. Redefina a senha sem precisar parar o banco:
# Conectar como superusuário (de dentro do container)
docker compose exec postgres psql -U postgres
-- Dentro do psql, redefinir a senha
ALTER USER meu_usuario WITH PASSWORD 'nova_senha_segura';
\q
# Confirmar com a nova senha
docker compose exec postgres psql -U meu_usuario -d meu_banco -c "SELECT 1;"
# Se a variável de ambiente no .env for POSTGRES_PASSWORD,
# recrie o container após alterar — o init só roda no primeiro boot:
# docker compose down && docker compose up -dCausa 2: pg_hba.conf não permite a conexão
"FATAL: no pg_hba.conf entry for host" significa que a origem da conexão não está autorizada. Edite o pg_hba.conf para permitir o host ou a rede:
# Ver o pg_hba.conf atual
docker compose exec postgres cat /var/lib/postgresql/data/pg_hba.conf
# Adicionar permissão para uma rede Docker (ex: 172.16.0.0/12)
# Editar via docker cp ou montar o arquivo via volume
# Linha a adicionar no pg_hba.conf:
# host all all 172.16.0.0/12 scram-sha-256
# Recarregar configuração sem reiniciar o banco
docker compose exec postgres psql -U postgres -c "SELECT pg_reload_conf();"Causa 3: porta 5432 não acessível externamente
Por padrão, o PostgreSQL no Docker não expõe a porta no host. Se você precisa conectar de fora da VPS (ex.: DBeaver no seu computador), mapeie a porta:
# No docker-compose.yml, adicionar exposição da porta:
services:
postgres:
image: postgres:16-alpine
ports:
- "5432:5432" # expõe no host (acessível externamente)
# Sem "ports:", a porta só é acessível dentro da rede Docker
# Verificar regras de firewall da VPS
ufw status
ufw allow 5432/tcp # liberar apenas se necessário
# Testar conexão externa (do seu computador)
psql -h IP_DA_VPS -p 5432 -U usuario -d bancoCausa 4: banco ou usuário não existe
"FATAL: database does not exist" ou "FATAL: role does not exist" — o banco ou usuário não foi criado. Crie manualmente:
# Criar usuário e banco
docker compose exec postgres psql -U postgres << 'EOF'
CREATE USER meu_usuario WITH PASSWORD 'senha_segura';
CREATE DATABASE meu_banco OWNER meu_usuario;
GRANT ALL PRIVILEGES ON DATABASE meu_banco TO meu_usuario;
EOF
# Listar bancos existentes
docker compose exec postgres psql -U postgres -c "\l"
# Listar usuários existentes
docker compose exec postgres psql -U postgres -c "\du"$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o PostgreSQL em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.