Как мне найти путь к файлу pg_hba.conf из командной строки?

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 вывод команды и посмотрите, является ли аргумент каталога данных postmaster -D виден там, например

ps aux  | grep 'postgres *-D'

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

Если вы ориентируетесь именно на системы Ubuntu с PostgreSQL, установленным из пакетов Debian / Ubuntu, все становится немного проще. Вам не нужно иметь дело с Pg, скомпилированным вручную из исходного кода, который кто-то initdb'd datadir для в их домашнем каталоге, или для установки EnterpriseDB Pg в / opt и т. Д. Вы можете спросить pg_wrapper, многоверсионный менеджер Pg Debian/Ubuntu, в котором 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 аргумент совпадает с тем, где вы редактируете, и т.д.