Postgresql 我怎样才能传递密码到pg_dump 10时。主目录中的pgpass不是一个选项?
我正在运行一个cron作业,它使用Postgresql 我怎样才能传递密码到pg_dump 10时。主目录中的pgpass不是一个选项?,postgresql,authentication,pg-dump,Postgresql,Authentication,Pg Dump,我正在运行一个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
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"
我无法将.pgpass
文件放在运行cron的用户下面,但我可以将其放在其他位置并指定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
(可能已删除?)
如果我无法在运行脚本的用户的主目录中创建.pgpass
文件,我还可以如何运行pg_dump
命令
在上下文中,我运行的是pg_dump
10.6版:
pg_dump --version
pg_dump (PostgreSQL) 10.6 (Ubuntu 10.6-0ubuntu0.18.04.1)
如果所有
$
、?
、*
、“
和\
都正确转义,则原始语句将有效
使用单引号而不是双引号是更好的解决方案,因为注释中建议使用带有“无”名称的“马”:
export PGPASSWORD='XXXXXXXX'; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql
使用密码总是令人讨厌的,因为它必须以明文形式存在
还有其他选择,比如使用
trust
身份验证(使用非常有限的pg_hba.conf
条目)或证书身份验证。第一个命令应该可以工作。我假设您只是指定了错误的密码。另一个选项是指定完整的密码。不幸的是,这不是问题,当我在交互提示中输入密码时,它可以工作。我将更新问题以添加该详细信息!您是否尝试删除双引号rom的export
命令?设置PGPASSWORD
确实有效,我敢肯定你出于某种原因传递了一个错误的密码。我不得不保留引号,因为密码中有特殊字符,但切换到单引号就成功了!谢谢!