在命令中使用fabric postgres密码

时间:2012-01-18 12:54:44

标签: postgresql fabric postgresql-9.1

我有一个在服务器上转储数据库的结构脚本。我可以在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='')。我希望这个代码可以使用或不使用密码。

1 个答案:

答案 0 :(得分:1)

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

所以,是的,如果你已经这样设置了,那么系统用户postgres将对某些数据库具有无密码访问权限,但会提示输入其他数据库的密码。 默认是系统用户postgres对每个数据库的无密码访问权限,作为同名的数据库用户(postgres)。

如果您在命令中使用environment variable PGPASSWORD提供密码,但不需要密码,则会以静默方式忽略该密码。

但是,我引用了manual here

  

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

您可以使用password file自动提供密码(在Unix系统上.pgpass)。 pg_dump将使用它。

最后,请考虑command line options

--no-password
--password

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


我会为系统用户postgres启用无密码访问到配置文件pg_hba.conf中的每个数据库。使用peerident authentication methods。然后您不必提供密码,脚本将始终有效:

local    all         postgres             ident

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

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