Я попытался с помощью переменного хоста PGPASSWORD
и .pgpass
и ни один из этих двух не позволит мне аутентификации в базу данных. У меня есть chmod
«д .pgpass
в соответствующие разрешения , а также пробовал:
export PGPASSWORD=mypass and PGPASSWORD=mypass
Пароль ДЕЙСТВИТЕЛЬНО содержит, \
однако я заключил его в одинарные кавычки, PGPASS='mypass\'
и он по-прежнему не аутентифицируется.
Я бегу:
pg_dump dbname -U username -Fc
и я все еще получаю
pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL: Peer authentication failed for user "username"
postgresql
pg-dump
Космонавт
источник
источник
Ответы:
Быстрое решение
Проблема в том, что он пытается выполнить локальную
peer
аутентификацию на основе вашего текущего имени пользователя. Если вы хотите использовать пароль, вы должны указать имя хоста с помощью-h
.Объяснение
Это связано со следующим в вашем
pg_hba.conf
Это указывает Postgres использовать
peer
аутентификацию для локальных пользователей, которая требует, чтобы имя пользователя postgres совпадало с вашим текущим системным именем пользователя. Вторая строка относится к соединениям с использованием имени хоста и позволит вам пройти аутентификацию с помощью пароля с помощьюmd5
метода.Моя предпочтительная конфигурация разработки
ПРИМЕЧАНИЕ . Это следует использовать только на однопользовательских рабочих станциях. Это может привести к серьезной уязвимости системы безопасности на производственной или многопользовательской машине.
При разработке с использованием локального экземпляра postgres мне нравится менять локальный метод аутентификации на
trust
. Это позволит подключаться к postgres через локальный сокет unix как любой пользователь без пароля. Это можно сделать, просто изменив значениеpeer
вышеtrust
и перезагрузив postgres.источник
sudo locate pg_hba.conf
- это должно быть sudo, поскольку пользователь postgres будет единственным, кто имеет доступ к каталогу (я думаю).Иногда вы можете использовать
источник