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 установил каталог данных в своем домашнем каталоге, или с EnterpriseDB Pg, установленным в / opt и т. Д. Вы можете спросить pg_wrapper, Debian / Ubuntu multi -version Pg manager, где 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 каталога данных с тем, где вы редактируете, и т. Д. .
https://askubuntu.com/questions/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711
1): Убедитесь, что у вас есть пользователь с именем postgres, созданный и имеющий права на вашу базу данных 2): Убедитесь, что у него есть пароль 3): Убедитесь, что ваш config / database.yml содержит учетные данные прав (имя пользователя + пароль)
нужно везде одноранговый узел и отступ установить на md5
См. Также этот ответ - соединение может не удастся на
localhost
, но успешно на127.0.0.1
.В моем случае мне нужно было добавить
host: localhost
в файлdatabase.yml
.эта ссылка помогла мне suite.opengeo.org/docs/latest/dataadmin/pgGettingStarted/…
Я исправил эту ошибку, добавив
--host=localhost
, который я считал значением по умолчаниюОбратитесь к этому для
postgres
ошибки аутентификации Ссылка