Mesmo que o php tenha
PGPASSFILE
no ambiente que herda do apache, conforme comprovado por getenv("PGPASSFILE")
, parece que este ambiente não é aquele que está disponível para o libpq
compartilhado biblioteca que lida com .pgpass
. É por isso que essa configuração é ignorada. Uma solução é repor no ambiente a variável que já está lá, em php, antes de conectar ao banco de dados:
if (getenv("PGPASSFILE")!="")
putenv("PGPASSFILE=".getenv("PGPASSFILE"));
O
putenv
explícito irá enviar a variável de forma a torná-la disponível para libpq
chamadas de getenv()
. Isso é estranho, pois normalmente um processo tem apenas um ambiente, mas parece funcionar. Eu perguntei sobre o problema do ambiente discordante entre as extensões e o núcleo do php em uma pergunta separada:Por que putenv() é necessário em uma variável de ambiente já definida?