O pg_config é para informações de compliação, para ajudar extensões e programas clientes a serem compilados e vinculados ao PostgreSQL. Ele não sabe nada sobre as instâncias ativas do PostgreSQL na máquina, apenas os binários.
O pg_hba.conf pode aparecer em muitos outros lugares, dependendo de como o Pg foi instalado. O local padrão é pg_hba.conf dentro do diretório de dados do banco de dados (que pode estar em / home, / var / lib / pgsql, / var / lib / postgresql / [versão] /, / opt / postgres / etc etc) mas usuários e empacotadores podem colocá-lo onde quiserem. Infelizmente.
As únicas maneiras válidas de encontrar o pg_hba.conf é perguntar a uma instância do PostgreSQL em execução onde está o pg_hba.conf, ou perguntar ao sysadmin onde está. Você não pode nem perguntar onde está o datadir e analisar o postgresql.conf porque um script init pode passar 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 galinha e ovo, pois se o usuário não conseguir se conectar (digamos, depois de estragar a edição do pg_hba.conf), você não poderá encontrar o pg_hba.conf para corrigi-lo.
Outra opção é examinar a saída do comando ps e ver se o argumento do diretório de dados postmaster -D está visível lá, por exemplo
ps aux | grep 'postgres *-D'
desde que o pg_hba.conf esteja dentro do diretório de dados (a menos que você esteja no Debian / Ubuntu ou em algum derivado e use 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 a página compilada manualmente a partir da fonte para a qual alguém iniciou um datadir em seu diretório pessoal ou com uma instalação do EnterpriseDB em / opt, etc. Você pode perguntar ao pg_wrapper, o multi-servidor Debian / Ubuntu gerenciador de versões, onde o PostgreSQL está usando o comando pg_lsclusters de pg_wrapper.
Se você não conseguir se conectar (o Pg não está em execução ou precisar editar o pg_hba.conf para se conectar), será necessário procurar no sistema os arquivos pg_hba.conf. No Mac e Linux, algo como o sudo find / -type f -name pg_hba.conf fará. Em seguida, verifique o arquivo PG_VERSION no mesmo diretório para garantir que seja 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, precisará analisar o tamanho do banco de dados, verifique a linha de comando dos postgres em execução do ps para ver se é o diretório de dados - o argumento D corresponde a onde você está editando, etc. .
/ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711