pg_config
é para informações de complementação, para ajudar extensões e programas clientes a compilar e vincular-se ao PostgreSQL. Ele não sabe nada sobre as instâncias ativas do PostgreSQL na máquina, apenas os binários.
pg_hba.conf
pode aparecer em muitos outros lugares, dependendo de como a Pg foi instalada. O local padrão é pg_hba.conf
dentro do data_directory
do banco de dados (que pode estar em /home
, /var/lib/pgsql
, /var/lib/postgresql/[version]/
, /opt/postgres/
, etc etc etc), mas os usuários e empacotadores podem colocá-lo onde quiserem . Infelizmente,
As únicas maneiras válidas de encontrar pg_hba.conf
é perguntar a uma instância do PostgreSQL em execução, onde ela é pg_hba.conf
, ou perguntar ao sysadmin onde ela está. Você não pode nem mesmo confiar em perguntar onde o datadir está e analisar postgresql.conf
porque um script de inicialização pode passar por um parâmetro como -c hba_file=/some/other/path
ao iniciar o Pg.
O que você quer fazer é perguntar ao PostgreSQL:
SHOW hba_file;
Este comando deve ser executado em uma sessão de superusuário, portanto, para scripts de shell, você pode escrever algo como:
psql -t -P format=unaligned -c 'show hba_file';
e defina as variáveis de ambiente PGUSER
, PGDATABASE
, etc para garantir que a conexão esteja correta.
Sim, isso é um problema de ovo e galinha, em que se o usuário não conseguir se conectar (digamos, depois de estragar a edição pg_hba.conf
) você não encontrará pg_hba.conf
para corrigi-lo .
Outra opção é examinar a saída do comando ps
e verificar se o argumento do diretório de dados do postmaster -D
está visível, por exemplo,
ps aux | grep 'postgres *-D'
desde que pg_hba.conf
esteja dentro do diretório de dados (a menos que você esteja no Debian / Ubuntu ou algum derivado e usando seus pacotes).
Se você está direcionando especificamente sistemas Ubuntu com o PostgreSQL instalado a partir de pacotes Debian / Ubuntu, fica um pouco mais fácil. Você não precisa lidar com o Pg compilado manualmente a partir do qual alguém initdb
'da datadir em seu diretório home, ou uma instalação do EnterpriseDB Pg em / opt, etc. Você pode perguntar a pg_wrapper
, o Debian / Gerenciador de Pg multi-versão do Ubuntu, onde o PostgreSQL está usando o comando pg_lsclusters
de pg_wrapper
.
Se você não conseguir se conectar (a página não está em execução ou você precisa editar pg_hba.conf
para se conectar), será necessário procurar no sistema arquivos pg_hba.conf
. No Mac e no Linux, algo como sudo find / -type f -name pg_hba.conf
serve. Em seguida, verifique o arquivo PG_VERSION
no mesmo diretório para ter certeza de que é a versão correta do PostgreSQL se você tiver mais de um. (Se pg_hba.conf
estiver em /etc
/, ignore isso, é o nome do diretório pai). Se você tiver mais de um diretório de dados para a mesma versão do PostgreSQL você terá que olhar o tamanho do banco de dados, verifique a linha de comando do postgres em execução de ps
para ver se o diretório de dados -D
argumento corresponde ao local onde você está edição, etc.