使用以下命令:
% 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 不像 psql 那样简单地使用 .pgpass 文件,但是即使将存储在 .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”。