pg_config предназначен для информации о комплиментах, чтобы помочь расширениям и клиентским программам компилироваться и связываться с PostgreSQL. Он ничего не знает об активных экземплярах PostgreSQL на машине, только двоичные файлы.
pg_hba.conf может появляться во многих других местах в зависимости от того, как был установлен Pg. Стандартное расположение - pg_hba.conf в каталоге data_directory базы данных (который может быть в / home, / var / lib / pgsql, / var / lib / postgresql / [версия] /, / 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-файл dadadir установлен в его домашнем каталоге, или с помощью EnterpriseDB Pg, установленным в / 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 с тем, где вы редактируете, и т. Д. .
/ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711