我如何在时将密码传递给pg_dump 10。主目录中的pgpass是不是一种选择?

时间:2019-02-06 06:51:34

标签: 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 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)

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条目)或证书身份验证。