Як знайти шлях до pg_hba.conf з оболонки?


101

Я хотів би отримати шлях до 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.


1
Як щодо місця знаходження pg_hba.conf?
Прамод

1
@Pramod Там могли лежати десятки з них. Що робити, якщо ви хочете дізнатися, який з них використовується Postgres.
Кровотечі пальцями

@BleedingFingers Залежно від налаштувань, ви, ймовірно, могли просто фільтрувати за часом доступу. find / -name pg_hba.conf -amin -5(якщо сервер був перезапущений за останні 5 хвилин; досить просто змінити його, -atimeякщо він востаннє перезапускався довший час тому). Або ви можете фільтрувати за часом доступу, більш новим, ніж час зміни, або одним із інших знаходять часові параметри ... (Хоча фільтрація за lsof | grep pg_hba.confдопомогою сервера не працює).
Парфянський розстріл

Відповіді:


151

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знаходиться, або запитати sysadmin, де він знаходиться. Ви навіть не можете розраховувати на запитання, де знаходиться datadir, і аналіз, postgresql.confоскільки сценарій init може передавати параметр, як -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є там видно аргумент каталогу даних postmaster , наприклад

ps aux  | grep 'postgres *-D'

оскільки вони pg_hba.confбудуть знаходитися всередині каталогу даних (якщо ви не перебуваєте на Debian / Ubuntu чи якійсь похідній і використовуєте їх пакети).

Якщо ви орієнтовані саме на системи Ubuntu з встановленим PostgreSQL з пакетів Debian / Ubuntu, це стає трохи простіше. Вам не доведеться мати справу з ручним скомпільований з-джерела Pg , що у кого - то initdb«так каталогу_данние для їх домашньої директорії, або 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відповідає аргумент каталогу даних, де ви редагуєте тощо


Це може бути psql: invalid port number: "format=unaligned"неправдивим для 9.3, я отримую: коли я запускаю цю команду psql.
jcollum

@jcollum Nope, просто помилка друку. -Pні -p. Виправлено.
Крейг Рінгер

Це єдина відповідь, яка працює, якщо у вас встановлено більше однієї версії PostgreSQL.
бон

Чи є надія в Повідомлень це стандартизувати? Це дуже допомогло б при головних болях при установці ...
Скотт Скілз

@ScottSkiles PostgreSQL не контролює це, це залежить від пакетів і дистриб'юторів, які мають усі тверді (і різні) думки щодо того, де це має бути.
Крейг Рінгер

21

Ось як я це роблю:

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


2

Я використовую наступне для виявлення файлів конфігурації:

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

1

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

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



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.