如何将密码传递给 pg_dump 10 when .主目录中的 pgpass 不是一个选项?

How can I pass a password to pg_dump 10 when . pgpass in home directory is not an option?

我正在 运行 使用 pg_dump 命令创建数据库转储的 cron 作业,如下所示:

export PGPASSWORD="XXXXXXXX"; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql

但是当我运行这个命令时,我得到一个密码验证错误:

pg_dump: [archiver (db)] connection to database "my_db" failed: FATAL:  password authentication failed for user "my_user"
FATAL:  password authentication failed for user "my_user"

我无法将 .pgpass 文件放在 运行 正在使用 cron 的用户下,但我可以将它放在其他地方并指定 PGPASSFILE ,如下所示:

export PGPASSFILE=/path/to/.pgpass; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql

但是这个 returns 同样的身份验证错误。我已经确认这不是密码错误的问题,因为当我使用交互式提示时它有效:

pg_dump --password -h localhost -U my_user my_db > /tmp/db_dump.sql
Password: XXXXXXXX

当我查看文档时,环境变量中似乎缺少 PGPASSWORDPGPASSFILE(也许它们已被删除?)https://www.postgresql.org/docs/10/app-pgdump.html

如果我无法在用户 运行ning 脚本的主目录中创建 .pgpass 文件,我还能如何 运行 pg_dump命令?

对于上下文,我是 运行ning pg_dump 版本 10.6:

pg_dump --version
pg_dump (PostgreSQL) 10.6 (Ubuntu 10.6-0ubuntu0.18.04.1)

如果所有 $?*"\ 都正确转义,您的原始语句将有效。

使用单引号而不是双引号是更好的解决方案,正如 a_horse_with_no_name 在评论中建议的那样:

export PGPASSWORD='XXXXXXXX'; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql

使用密码总是令人讨厌,因为它必须以明文形式存在。

还有其他选择,例如使用 trust 身份验证(具有非常有限的 pg_hba.conf 条目)或证书身份验证。