命令中的fabric postgres密码



我有一个将数据库转储到服务器上的结构脚本。我可以在多台带有PostgreSQL数据库的服务器上使用它。命令很简单:

sudo("su postgres -c "PGPASSWORD=%s pg_dump %s > /tmp/telemedia_newdb""
% (HOST_SOURCE_DB_UPASS,HOST_SOURCE_DB))

但有时,Postgres根本不要求密码。。。

如果没有Postgres的密码提示,这个命令会失败吗?(或者我知道它不会提示和HOST_SOURCE_DB_UPASS='')。我希望此代码可以使用或不使用密码。

这完全取决于如何在pg_hba.conf中设置对数据库的访问。每个数据库集群(实际上是每个端口)都有一个单独的配置文件,不同数据库的设置可能不同。

因此,是的,如果您这样设置,那么系统用户postgres将可以无密码访问某些数据库,但会提示您输入其他数据库的密码。默认是系统用户postgres作为同名数据库用户(postgres)可以无密码访问每个数据库。

如果您在带有环境变量PGPASSWORD的命令中提供了密码,但不需要密码,则该密码将被忽略。

然而,我在这里引用手册:

PGPASSWORD(…)出于安全原因,不建议使用此环境变量。

您可以使用密码文件自动提供密码(Unix系统上的.pgpass)。pg_dump将使用它。

最后,考虑命令行选项:

--no-password
--password

强制pg_dump提示或不提示输入密码。如果需要密码,但--no-password禁用了密码,则pg_dump将失败。


我将为系统用户postgres启用对配置文件pg_hba.conf中的每个数据库的无密码访问。使用peerident身份验证方法。然后你不必提供密码,脚本就会一直工作:

local    all         postgres             ident

您的脚本将被简化为(未经测试):

sudo("su postgres -c "pg_dump %s > /tmp/telemedia_newdb"" % (HOST_SOURCE_DB))

最新更新