我正在运行一个使用 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
当我查看文档时,环境变量中似乎缺少 PGPASSWORD
和 PGPASSFILE
(也许它们已被删除?)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/