Eu gostaria de obter o caminho para pg_hba.conf do shell. O caminho varia entre as versões do PostgreSQL. Por exemplo, para 8.4 e 9.1:
/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf
Eu tentei o pg_config
comando, mas ele não parece incluir essas informações.
Isso é para que eu possa usar um comando uniforme para abrir pg_hba.conf
e outros arquivos de configuração do PostgreSQL para editar.
Estou usando o bash.
postgresql
Roger Dahl
fonte
fonte
find / -name pg_hba.conf -amin -5
(se o servidor foi reiniciado nos últimos 5 minutos; é fácil alterá-lo para-atime
se foi reiniciado pela última vez há mais tempo). Ou você pode filtrar por tempo de acesso mais recente que o horário de alteração ou uma das outras opções de localização com base em tempo ... (Embora a filtragem porlsof | grep pg_hba.conf
enquanto o servidor em execução não funcione).Respostas:
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.pg_hba.conf
pode aparecer em muitos outros lugares, dependendo de como a página foi instalada. A localização padrão épg_hba.conf
dentro dodata_directory
do banco de dados (que pode ser em/home
,/var/lib/pgsql
,/var/lib/postgresql/[version]/
,/opt/postgres/
, etc etc etc) mas os usuários e empacotadores pode colocá-lo onde quiserem. Infelizmente.As únicas maneiras válidas encontradas
pg_hba.conf
são perguntar a uma instância do PostgreSQL em execução, ondepg_hba.conf
está, ou perguntar ao administrador de sistemas, onde está. Você não pode nem perguntar onde está o datadir e a análise,postgresql.conf
porque um script init pode ter passado um parâmetro como-c hba_file=/some/other/path
ao iniciar a página.O que você quer fazer é perguntar ao PostgreSQL:
Este comando deve ser executado em uma sessão de superusuário, portanto, para scripts de shell, você pode escrever algo como:
e definir as variáveis de ambiente
PGUSER
,PGDATABASE
etc para garantir que a conexão é certo.Sim, isso é um problema de galinha e ovo, pois se o usuário não puder se conectar (digamos, depois de estragar a edição
pg_hba.conf
), você não poderá encontrarpg_hba.conf
para corrigi-lo.Outra opção é examinar a
ps
saída do comando e ver se o argumento do diretório de dados postmaster-D
está visível lá, por exemplodesde
pg_hba.conf
que 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á direcionado especificamente para sistemas Ubuntu com o PostgreSQL instalado a partir de pacotes Debian / Ubuntu, fica um pouco mais fácil. Você não tem que lidar com mão-de-compilado-source Pg que alguém da
initdb
'da datadir no seu diretório home, ou um Pg EnterpriseDB instalar em / opt, etc. Você pode perguntarpg_wrapper
, o Debian / Ubuntu multi-versão Pg gerente, onde PostgreSQL está usando opg_lsclusters
comando depg_wrapper
.Se você não conseguir se conectar (a página não está sendo executada ou você precisa editar
pg_hba.conf
para se conectar), será necessário procurarpg_hba.conf
arquivos no sistema . No Mac e Linux, algo como osudo find / -type f -name pg_hba.conf
fará. Em seguida, verifique oPG_VERSION
arquivo no mesmo diretório para garantir que seja a versão correta do PostgreSQL, se você tiver mais de um. (Sepg_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çãops
para ver se o-D
argumento do diretório de dados corresponde ao local onde você está editando etc.fonte
psql: invalid port number: "format=unaligned"
quando executo esse comando psql.-P
não-p
. Fixo.É assim que eu faço:
Como o caminho é assim:
/etc/postgresql/[VERSION]/main/pg_hba.conf
fonte
Estou usando o seguinte para detecção de arquivos de configuração:
fonte
Editar o correto
pg_hba.conf
com o seu editor visual padrão (vim, emacs, nano, joe etc.) é tão fácil quanto:$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf
fonte
Pergunte ao seu banco de dados:
fonte
Para saber onde está o arquivo, digite:
fonte