Как мне найти путь к pg_hba.conf из оболочки?

Я хотел бы получить путь к 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.

102
задан 15 February 2013 в 22:38

6 ответов

Я использую следующее для обнаружения файлов конфигурации:

$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)
0
ответ дан 15 February 2013 в 22:38

Чтобы узнать, где находится файл, просто введите:

pg_lsclusters
0
ответ дан 15 February 2013 в 22:38

Редактировать правильный pg_hba.conf с помощью визуального редактора по умолчанию (vim, emacs, nano, joe и т. Д.) Так же просто, как:

$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf

0
ответ дан 15 February 2013 в 22:38

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

0
ответ дан 15 February 2013 в 22:38

Вот как я это делаю:

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

0
ответ дан 15 February 2013 в 22:38

Задайте свою базу данных:

$ psql -U postgres
postgres=# SHOW config_file;
0
ответ дан 15 February 2013 в 22:38

Другие вопросы по тегам:

Похожие вопросы: