Быстрое решение
Проблема в том, что он пытается выполнить локальную 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