Я хотел бы получить путь к pg_hba.conf из оболочки. Путь варьируется между версиями PostgreSQL. Например, для 8.4 и 9.1:
/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf
я пробовал команду pg_config
, но, похоже, она не включает эту информацию.
Это сделано для того, чтобы я мог использовать унифицированную команду для открытия pg_hba.conf
и других файлов конфигурации PostgreSQL для редактирования.
Я использую Bash.
Я использую следующее для обнаружения файлов конфигурации:
$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)
Чтобы узнать, где находится файл, просто введите:
pg_lsclusters
Редактировать правильный pg_hba.conf
с помощью визуального редактора по умолчанию (vim, emacs, nano, joe и т. Д.) Так же просто, как:
$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/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
и посмотреть, видим ли там аргумент каталога данных администратора почты -D
, например,
ps aux | grep 'postgres *-D'
, поскольку pg_hba.conf
будет в каталоге данных (если вы не используете Debian / Ubuntu или какую-либо производную и используете их пакеты).
Если вы нацелены конкретно на системы Ubuntu с PostgreSQL, установленным из пакетов Debian / Ubuntu, это станет немного проще. Вам не нужно иметь дело с Pg, скомпилированным вручную из исходного кода, для которого кто-то initdb
da dadadir указывает в своем домашнем каталоге, или с установкой EnterpriseDB Pg в / opt и т. Д. Вы можете спросить pg_wrapper
, Debian / Ubuntu многоверсионный менеджер Pg, в котором 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
тому, где вы находитесь редактирование и т. д.
Вот как я это делаю:
john@host:~$ ls /etc/postgresql
9.1
john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf
Так как путь такой: /etc/postgresql/[VERSION]/main/pg_hba.conf
Задайте свою базу данных:
$ psql -U postgres
postgres=# SHOW config_file;