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