postgresql - . 时如何将密码传递给 pg_dump 10主目录中的 pgpass 不是

我正在运行一个使用 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"

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

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

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

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

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

对于上下文,我正在运行 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 条目)或证书身份验证。

关于postgresql - . 时如何将密码传递给 pg_dump 10主目录中的 pgpass 不是一个选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54548085/

相关文章:

amazon-web-services - "kubectl"未从我的本地 Windows 工作站连

haskell - 计算列表中每个元素的所有出现次数

websocket - 错误 : Error when readinrror: Error when

angular - 找不到自定义管道 ionic 4 |找不到管道

python - FlaskForm 验证码 : checking if a user alread

python - 无法使用 python 3.72 连接 firebase

reactjs - 在导航更改时滚动恢复到顶部

python - 如何组合两个 Python Try 异常

angular - ng2图表多图表更新

c# - 如何从 dapper 返回的复杂对象中修剪所有字符串