我正在运行一个cron作业,该作业使用pg_dump
命令创建数据库转储,如下所示:
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)
答案 0 :(得分: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
条目)或证书身份验证。