nin*_*ich 2 authentication postgresql pg-dump
我正在运行一个 cron 作业,使用以下命令创建数据库转储pg_dump,如下所示:
export PGPASSWORD="XXXXXXXX"; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql
Run Code Online (Sandbox Code Playgroud)
但是当我运行此命令时,出现密码身份验证错误:
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"
Run Code Online (Sandbox Code Playgroud)
我无法将.pgpass文件放置在运行 cron 的用户下,但我可以将其放置在其他位置并指定如下PGPASSFILE:
export PGPASSFILE=/path/to/.pgpass; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql
Run Code Online (Sandbox Code Playgroud)
但这再次返回相同的身份验证错误。我已经确认这不是密码错误的问题,因为当我使用交互式提示时它有效:
pg_dump --password -h localhost -U my_user my_db > /tmp/db_dump.sql
Password: XXXXXXXX
Run Code Online (Sandbox Code Playgroud)
当我查看文档时,它看起来像是PGPASSWORD环境PGPASSFILE变量中缺少的(也许它们已被删除?)https://www.postgresql.org/docs/10/app-pgdump.html
如果我无法.pgpass在运行脚本的用户的主目录中创建文件,我还能如何运行pg_dump command?
对于上下文,我运行的是pg_dump10.6 版本:
pg_dump --version
pg_dump (PostgreSQL) 10.6 (Ubuntu 10.6-0ubuntu0.18.04.1)
Run Code Online (Sandbox Code Playgroud)
Lau*_*lbe 14
$如果所有、?、*、"和 都被正确转义,您的原始语句将起作用\。
使用单引号而不是双引号是更好的解决方案,正如 a_horse_with_no_name 在评论中建议的那样:
export PGPASSWORD='XXXXXXXX'; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql
Run Code Online (Sandbox Code Playgroud)
通常更好的替代方法是使用密码文件。
使用密码总是令人讨厌的,因为它必须以明文形式存在。
还有其他选择,例如使用trust身份验证(条目非常有限pg_hba.conf)或证书身份验证。
| 归档时间: |
|
| 查看次数: |
17476 次 |
| 最近记录: |