0

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

4

1 回答 1

1

这完全取决于您如何在pg_hba.conf. 每个数据库集群有一个单独的配置文件(有效地每个端口),并且设置可能因数据库而异。

所以,是的,如果您以这种方式进行设置,那么系统用户postgres将对某些数据库进行无密码访问,但系统会提示您输入其他数据库的密码。默认情况下,系统用户postgres作为同名数据库用户 ( ) 可以无密码访问每个数据库postgres

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

但是,我在这里引用手册

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

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

最后,考虑命令行选项

--no-password
--password

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


我将为系统用户启用对配置文件中每个数据库的无密码访问。使用或认证方法。然后您不必提供密码,脚本将始终有效:postgrespg_hba.confpeerident

local    all         postgres             ident

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

sudo("su postgres -c \"pg_dump %s > /tmp/telemedia_newdb\"" % (HOST_SOURCE_DB))
于 2012-01-18T18:44:46.880 回答