すべては、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は失敗する。
私は、configファイルpg_hba.conf
内のすべてのデータベースへのシステムユーザーpostgres
用パスワードなしアクセスを可能にします。 peer
またはident
authentication methodsを使用してください。次に、パスワードを入力する必要はありませんし、スクリプトが常に動作します:
local all postgres ident
あなたのスクリプトが(未テスト)のように簡略化されます:
sudo("su postgres -c \"pg_dump %s > /tmp/telemedia_newdb\"" % (HOST_SOURCE_DB))