Como encontro o caminho para o pg_hba.conf a partir do shell?

67

Eu gostaria de obter o caminho para o pg_hba.conf a partir 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 comando pg_config , mas não parece incluir essa informação.

Isso é para que eu possa usar um comando uniforme para abrir pg_hba.conf e outros arquivos de configuração do PostgreSQL para edição.

Estou usando o bash.

    
por Roger Dahl 15.02.2013 / 19:38

6 respostas

103

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.

    
por Craig Ringer 16.02.2013 / 04:18
17

É assim que eu faço:

john@host:~$ ls /etc/postgresql
9.1
john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

Como o caminho é assim: /etc/postgresql/[VERSION]/main/pg_hba.conf

    
por its_me 29.08.2013 / 15:42
2

Estou usando o seguinte para a detecção de arquivos de configuração:

$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)
    
por radeklos 10.10.2014 / 15:07
1

Editar o pg_hba.conf correto com o editor visual padrão (vim, emacs, nano, joe, etc.) é tão fácil quanto:

$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf

    
por christianbundy 25.04.2015 / 00:30
0

Pergunte ao seu banco de dados:

$ psql -U postgres
postgres=# SHOW config_file;
  • copiado do Stackoverflow - link
por Keerthi S 04.06.2018 / 15:55
-2

Para saber onde o arquivo está basta digitar:

pg_lsclusters
    
por nirvanastack 14.10.2013 / 01:53

Tags