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

问题描述 投票:0回答:1

我正在运行使用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

当我在看的文件,它看起来像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)
postgresql authentication pg-dump
1个回答
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条目)或证书认证。

© www.soinside.com 2019 - 2024. All rights reserved.