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".