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, скомпилированным вручную из исходного кода, для которого чей-то initdbda dadadir находится в его домашнем каталоге, или с Pg EnterpriseDB, установленным в / 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совпадает ли его аргумент каталога данных с тем, где вы редактируете, и т. Д.