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