Psql использует файл.pgpass, а pg_dump - нет, и он также не подключается с использованием правильного пароля

Используя следующую команду:

% pg_dump -h postgres.cs.host.ca -p 5433 -n _cscf_subscription -Fc -f ~/old.dump odyssey_prod
Password: 
pg_dump: [archiver (db)] connection to database "cs-rsub" failed: FATAL:  password authentication failed for user "cs-rsub"
FATAL:  password authentication failed for user "cs-rsub"

Тем не менее PSQL работает нормально:

% psql -U _cscf_subscription -d odyssey_prod -h postgres.cs.host.ca -p 5433
psql (9.3.4, server 9.2.4)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=> \q

Странно, что pg_dump не просто использует файл.pgpass, как это делает psql, однако даже при вставке и ручном вводе пароля, который хранится в файле.pgpass, в приглашение пароля pg_dump, все равно не проходит аутентификацию. Я использую ту же учетную запись, ту же роль, и тот же хост.

Что может быть не так?

Если версии имеют значение вообще:

SELECT version(); выполняется через рабочий psql возвращает:

PostgreSQL 9.2.4 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit

А также pg_dump --version является:

pg_dump (PostgreSQL) 9.3.4

Я сомневаюсь, что это будет иметь значение, но psql --version является:

psql (PostgreSQL) 9.3.4

Есть идеи, что идет не так?

1 ответ

Решение

Вы не "используете ту же учетную запись, ту же роль и тот же хост", даже близко не.

В вашем pg_dump позвольте вам не указывать имя пользователя (-U) или базу данных (-d), только имя хоста (-h) и схему (-n). Так pg_dump использует вашего системного пользователя в качестве имени пользователя БД и базы данных для подключения. Судя по сообщению об ошибке, пользователь вашей системы выглядит как "cs-rsub".

в psql Вы можете указать имя пользователя (-U) и базу данных (-d), и ни один из них не является "cs-rsub".

Другие вопросы по тегам