为什么.pgpass文件没有为pg_dump,vacuumdb或reindexdb命令提供密码?

时间:2018-06-13 22:51:12

标签: bash postgresql postgresql-9.5 pg-dump

我试图在不同的bash脚本中执行几个不同的PostgreSQL命令。我认为我已正确配置了.pgpass文件,但是当我尝试运行pg_dumpvacuumdbreindexdb时,我收到有关密码如何不正确的错误。提供。为了使我的bash脚本正确执行,我需要这些命令来返回退出代码0。

我在macOS 10.12.6(16G1408)上运行PostgreSQL 9.5.4。

在管理员用户帐户[rootpostgres]中,我在.pgpass中有~个文件。 .pgpass文件包含:

localhost:5432:*:postgres:DaVinci

用户确实是postgres,密码确实是DaVinci

.pgpass文件的权限为600

pg_hba.conf文件中,我有:

# pg_hba.conf file has been edited by DaVinci Project Server. Hence, it is recommended to not edit this file manually.
# TYPE    DATABASE    USER    ADDRESS    METHOD
local    all    all    md5
host    all    all    127.0.0.1/32    md5
host    all    all    ::1/128    md5

因此,例如,从用户帐户[rootpostgres]开始,我运行:

/Library/PostgreSQL/9.5/pgAdmin3.app/Contents/SharedSupport/pg_dump --host localhost --username postgres testworkflow13 --blobs --file /Users/username/Desktop/testdestination1/testworkflow13_$(date "+%Y_%m_%d_%H_%M").backup --format=custom --verbose --no-password

我收到以下错误:

pg_dump: [archiver (db)] connection to database "testworkflow13" failed: fe_sendauth: no password supplied

如果我也使用sudo运行此结果,我会得到相同的结果。

奇怪的是,pg_dump 执行 .backup文件导出到testdestination1目录,但由于它抛出错误,如果它在bash脚本中,则脚本停止。

我哪里错了?如何确保正确读取.pgpass文件,以便命令中的--no-password标志有效?

2 个答案:

答案 0 :(得分:0)

结果证明,将pg_hba.conf文件中的所有三行更改为trust身份验证方法即可解决此问题。

local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust

由于该方法为trust,因此.pgpass文件可能完全不相关-我不确定,但是至少我知道它可以工作。

答案 1 :(得分:0)

请先阅读official docs
另外,即使这个话题也已经超过 2 年了,我强烈建议至少更新到版本 10,无论如何,.pgpass 周围没有任何相关的变化

.pgpass 需要是chmod 600,好吧,使用那个的用户必须可以读取,所以那个必须是那个文件的所有者。

请删除 --no-password 只是混淆并且不需要。

使用 127.0.0.1 而不是 localhost 说明你要去哪里,“通常”是一样的。

<块引用>

... 来自用户帐户 [既不是 root 也不是 postgres] ...

如上所述,您所使用的用户必须具有对 .pgpass 的读取权限,因此您必须澄清这一点并将该文件提供给该用户,也许使用 PGPASSFILE 环境变量可能对您有用。

另一种方法是使用带有或不带有 .pgpass 的 .pg_service.conf 文件,对于您编写的内容,它看起来可能更合适

此外,你可以在用户的​​ENV设置PGPASSWORD。

考虑安全性,有些选择看起来最简单,但可以公开访问权限.. 作为 DBA,坦率地说,我厌倦了将密码存储在可见位置、打印在日志或 github 中或在 pg_hba 中设置“信任”的人,最后来找我说“postgreSQL 不安全”……哈哈哈!

最后一点,您没有 pg_hba 错误,以防您收到“pg_hba”错误消息。