带有 -w 标志的 pg_dump 无法从 .pgpass 文件读取

带有 -w 标志的 pg_dump 无法从 .pgpass 文件读取

我正在尝试备份我的 PostgreSQL 数据库船员数据库在 Ubuntu 18.04 LTS 上使用包含以下命令的脚本:

pg_dump -h localhost -p 5432 -U postgres -w -C -F p -b -v -f ~/Dropbox\/postgres_backup/crewdb.backup.sql crewdb

我知道上述命令运行的脚本本身是有效的。当我使用 -W 而不是 -w 运行上述命令时,系统会提示我输入密码,备份会顺利进行。我试图在脚本中自动执行此命令,并希望备份继续进行而无需提示输入密码,因此使用 -w 标志。为此,我创建了以下文件

/home/chh1/.pgpass

什么时候ls -la ~/.pgpass

-rw------- 1 chh1 chh1 74 Oct 15 10:00 .pgpass

在 .pgpass 文件中我放置了以下文本:

# Server:Port:Database:Username:Password

*:*:crewdb:postgres:9Gh#$mq

但是,当我运行命令时,出现以下错误输出,并且备份失败:

pg_dump -h localhost -p 5432 -U postgres -w -C -F p -b -v -f ~/Dropbox\/postgres_backup/crewdb.backup.sql crewdb

pg_dump: [archiver (db)] connection to database "crewdb" failed: FATAL: password authentication failed for user "postgres" password retrieved from file "/home/chh1/.pgpass" FATAL: password authentication failed for user "postgres" password retrieved from file "/home/chh1/.pgpass"

如果这里有人能给我指明正确的道路我将非常感激!

答案1

这个问题的答案已经找到了。

跑步时

hexdump -C ~/.pgpass

我得到了以下输出:

00000000  23 20 68 6f 73 74 6e 61  6d 65 3a 70 6f 72 74 3a  |# hostname:port:|
00000010  64 61 74 61 62 61 73 65  3a 75 73 65 72 6e 61 6d  |database:usernam|
00000020  65 3a 70 61 73 73 77 6f  72 64 0a 2a 3a 2a 3a 63  |e:password.*:*:c|
00000030  72 65 77 64 62 3a 70 6f  73 74 67 72 65 73 3a 39  |rewdb:postgres:9|
00000040  47 68 23 24 6d 71 20 0a                           |Gh#$mq .|
00000048

第五行列出了一个 20,指向密码末尾但在行尾之前的空格,表明密码末尾有一个不应该出现的空格。删除空格后,命令执行时不会提示输入任何密码。

该问题的答案由 ServerVault 的 Daniel Vérité 提供。

相关内容