読者です 読者をやめる 読者になる 読者になる

pg_dumpの実行時にパスワード入力を省略する

PostgreSQL

pgではpg_dump実行時に必ずインタラクティブなパスワードの入力を求められるのですが、cron jobでのpb_dump実行時に、パスワードの入力を省きたいって感じのことです。どうやらパスワードを渡す方法はないみたいですね。

PostgreSQL公式docのpg_dumpのところ

https://www.postgresql.jp/document/9.0/html/app-pgdump.html

-wオプションのところで以下のような記述が。

-w --no-password パスワードの入力を促しません。 サーバがパスワード認証を必要とし、かつ、.pgpassファイルなどの他の方法が利用できない場合、接続試行は失敗します。 バッチジョブやパスワードを入力するユーザが存在しない場合にこのオプションは有用かもしれません。

ふむ、.pgpassなるファイルがあるのか。

d.hatena.ne.jp

公式doc

31.15. パスワードファイル

.pgpassというファイルをホームディレクトリに配置することで、pgは勝手にそれをパスワードとして使用してくれるみたいです。

.pgpassのフォーマットは以下のようにします。

# hostname:port:database:username:password
hostname:port:database:username:password

最初の4フィールドに関してはワイルドカードもありみたいです。また、

Unixシステムにおいて、.pgpassの権限はグループ、他者へのアクセスをすべて拒否しなければなりません。 これはchmod 0600 ~/.pgpassといったコマンドによって行います。 権限をこれよりも緩くすると、このファイルは無視されます。

とのことなので、

$ sudo chmod 0600 ~/.pgpass

としておきましょう。

これで、

$ pg_dump -Ft -U USER_NAME -w DB_NAME > BACKUP_FILE

のように-wでパスワードを省略してpd_dumpを実行することができました。わーい