Как я могу получить pg_dump для проверки подлинности

Я пробовал использовать переменную хоста PGPASSWORD и .pgpass, и ни одна из этих двух не позволит мне аутентифицироваться в базе данных. У меня есть chmod 'd .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"

Ответ 1

Быстрое решение

Проблема заключается в том, что он пытается выполнить локальную аутентификацию peer на основе вашего текущего имени пользователя. Если вы хотите использовать пароль, вы должны указать имя хоста с -h.

pg_dump dbname -U username -h localhost -F c

Объяснение

Это связано с тем, что в pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Это сообщает Postgres использовать аутентификацию peer для локальных пользователей, для которой требуется, чтобы имя пользователя postgres соответствовало вашему текущему имени системы. Вторая строка относится к соединениям с использованием имени хоста и позволит вам аутентифицироваться с помощью пароля с помощью метода md5.

Моя конфигурация предпочтительной разработки

ПРИМЕЧАНИЕ. Это следует использовать только на однопользовательских рабочих станциях. Это может привести к серьезной уязвимости безопасности на производственной или многопользовательской машине.

При разработке против локального экземпляра postgres мне нравится менять свой метод локальной аутентификации на trust. Это позволит подключиться к postgres через локальный unix-сокет как любой пользователь без пароля. Это можно сделать, просто изменив peer выше на trust и перезагрузив postgres.

# Don't require a password for local connections
local   all             all                                     trust