我试图在不同的bash
脚本中执行几个不同的PostgreSQL命令。我认为我已正确配置了.pgpass
文件,但是当我尝试运行pg_dump
,vacuumdb
或reindexdb
时,我收到有关密码如何不正确的错误。提供。为了使我的bash
脚本正确执行,我需要这些命令来返回退出代码0。
我在macOS 10.12.6(16G1408)上运行PostgreSQL 9.5.4。
在管理员用户帐户[root
和postgres
]中,我在.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
因此,例如,从用户帐户[root
和postgres
]开始,我运行:
/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
标志有效?
答案 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”错误消息。