Olá, Lazaro. Como vai?
Esse erro FATAL: autenticação do tipo senha falhou é um clássico no gerenciamento de bancos de dados, especialmente ao automatizar scripts no Windows. O problema ocorre porque o psql (cliente do PostgreSQL) é um executável interativo; por padrão, ele para tudo e espera que um ser humano digite a senha no teclado. Como seu script está rodando em segundo plano, ele não consegue "digitar" a senha e a conexão é recusada.
Como você é Gerente de Projetos de TI, sabe que em automação precisamos eliminar a interação manual. Para o PostgreSQL no Windows 11, você tem três caminhos principais para resolver isso sem precisar passar a senha como um parâmetro direto (o que seria um risco de segurança):
1. O Arquivo .pgpass (Recomendado)
O PostgreSQL procura por um arquivo chamado pgpass.conf para buscar credenciais automaticamente.
- Localização: No Windows, ele deve estar em
%APPDATA%\postgresql\pgpass.conf. - Formato:
localhost:5432:nome_do_banco:postgres:sua_senha - Vantagem: É a forma mais segura e profissional de gerenciar automações locais.
2. Variável de Ambiente PGPASSWORD
Você pode definir a senha temporariamente na sessão do seu terminal (PowerShell) antes de rodar o script:
$env:PGPASSWORD = "sua_senha_aqui"
.\seu_script.ps1
- Atenção: Use isso apenas para testes rápidos, pois a senha pode ficar exposta no histórico do terminal.
3. Configuração pg_hba.conf (Nível Adm)
Se você estiver em um ambiente de desenvolvimento controlado e quiser que o usuário postgres se conecte localmente sem senha:
- Localize o arquivo
pg_hba.conf na pasta data do seu Postgres. - Mude a linha de conexão
host para 127.0.0.1/32 de scram-sha-256 (ou md5) para trust. - Reinicie o serviço do PostgreSQL.
Dica técnica:
Verifique se o seu script check_time_query não está tentando usar aspas duplas de forma errada na senha dentro do código, o que também causa falha de autenticação. O Windows 11 às vezes lida de forma diferente com caracteres especiais em strings do PowerShell.
Se estiver usando o PowerShell para disparar o comando, tente encapsular a chamada do psql garantindo que o ambiente reconheça o usuário.
Qual dessas abordagens melhor se adapta à política de segurança do seu projeto atual?