我正在运行使用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
条目)或证书认证。