Psql 使用 .pgpass 文件,但是 pg_dump 不使用,并且也无法使用正确的密码进行连接

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 不像 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”。

相关内容