Как найти путь к pg_hba.conf из оболочки?

62

Я хотел бы получить путь к pg_hba.conf из оболочки. Путь варьируется между версиями PostgreSQL. Например, для 8.4 и 9.1:

/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf

Я пробовал команду pg_config , но, похоже, не содержит этой информации.

Это так, что я могу использовать единую команду для открытия pg_hba.conf и других файлов конфигурации PostgreSQL для редактирования.

Я использую bash.

    
задан Roger Dahl 15.02.2013 в 19:38
источник

5 ответов

94

pg_config предназначен для информации об осложнениях, чтобы помочь расширениям и клиентским программам скомпилировать и связать с PostgreSQL. Он ничего не знает об активных экземплярах PostgreSQL на машине, только двоичные файлы.

pg_hba.conf может отображаться во многих других местах в зависимости от того, как был установлен Pg. Стандартное местоположение - pg_hba.conf в data_directory базы данных (которое может быть в /home , /var/lib/pgsql , /var/lib/postgresql/[version]/ , /opt/postgres/ и т. Д. И т. Д. И т. Д.), Но пользователи и упаковщики могут размещать их там, где им нравится , К сожалению.

Единственные допустимые способы найти pg_hba.conf - спросить исполняемый экземпляр PostgreSQL, где он pg_hba.conf , или задать системный администратор, где он есть. Вы даже не можете рассчитывать на то, где находится datadir, и анализировать postgresql.conf , потому что сценарий инициализации может передать параметр, например -c hba_file=/some/other/path , при запуске Pg.

Что вы хотите сделать, это спросить PostgreSQL:

SHOW hba_file;

Эта команда должна запускаться в сеансе суперпользователя, поэтому для сценариев оболочки вы можете написать что-то вроде:

psql -t -P format=unaligned -c 'show hba_file';

и установите переменные среды PGUSER , PGDATABASE и т. д., чтобы убедиться, что соединение правильно.

Да, это несколько проблема с курицей и яйцом, потому что если пользователь не может подключиться (скажем, после устранения редактирования pg_hba.conf ), вы не можете найти pg_hba.conf , чтобы его исправить .

Другой вариант - посмотреть на вывод команды ps и посмотреть, есть ли там файл каталога сообщений -D , например

ps aux  | grep 'postgres *-D'

, так как pg_hba.conf будет находиться внутри каталога данных (если вы не находитесь в Debian / Ubuntu или какой-либо производной и используете их пакеты).

Если вы ориентируетесь именно на системы Ubuntu с PostgreSQL, установленными из пакетов Debian / Ubuntu, это становится немного проще. Вам не нужно иметь дело с hand-compiled-from-source Pg, что кто-то initdb 'da datadir для своего домашнего каталога, или EnterpriseDB Pg install in / opt и т. Д. Вы можете спросить pg_wrapper , Debian / Ubuntu multi-version Pg manager, где PostgreSQL использует команду pg_lsclusters от pg_wrapper .

Если вы не можете подключиться (Pg не работает или вам нужно отредактировать pg_hba.conf для подключения), вам придется искать в системе файлы pg_hba.conf . На Mac и Linux что-то вроде sudo find / -type f -name pg_hba.conf будет делать. Затем проверьте файл PG_VERSION в том же каталоге, чтобы убедиться, что это правильная версия PostgreSQL, если у вас несколько. (Если pg_hba.conf находится в /etc /, игнорируйте это, вместо этого это имя родительского каталога). Если у вас несколько каталогов данных для одной и той же версии PostgreSQL, вам нужно посмотреть размер базы данных, проверьте в командной строке запущенные postgres из ps , чтобы узнать, соответствует ли каталог данных -D , где вы находитесь редактирование и т. д.

    
ответ дан Craig Ringer 16.02.2013 в 04:18
источник
16

Вот как я это делаю:

[email protected]:~$ ls /etc/postgresql
9.1
[email protected]:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

Так как путь такой: /etc/postgresql/[VERSION]/main/pg_hba.conf

    
ответ дан its_me 29.08.2013 в 15:42
2

Я использую следующие для обнаружения файлов конфигурации:

$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)
    
ответ дан radeklos 10.10.2014 в 15:07
1

Редактирование правильного pg_hba.conf с помощью визуального редактора по умолчанию (vim, emacs, nano, joe и т. д.) так же просто, как:

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

ответ дан christianbundy 25.04.2015 в 00:30
-2

Чтобы узнать, где находится файл просто введите:

pg_lsclusters
    
ответ дан nirvanastack 14.10.2013 в 01:53