pg_dumpがパスワード聞いてくる

Linux上で稼動しているPostgreSQLのバックアップを日々cronで取りたい、というごくごく普通のオペレーション。で、ちょこっとググってやってみる。まず、コマンドラインから実験。こんな感じ。

pg_dump -U ユーザ名 DB名 > ログファイル名

するとパスワードを聞いてくる。これじゃcronで起動できないじゃん。誰が(夜中に?)パスワード入れるんだよ?-W パスワードっていうオプションがあるらしいのだが効果なし。で、もうちょっとググる。と、-w(小文字)というオプションを指定することでパスワードを聞かなくなるらしい。ただし、ユーザのホームディレクトリ直下に.pgpassというファイルが0600権限で必要とのこと。で、その中身は、こんな感じすれば、ここからパスワードを拾ってきてくれるとのこと。

localhost:5432:*:ユーザ名:パスワード

しかし今度は、これでもパスワードがない(no password supplied)だのと怒られて、相変らずバックアップが取れない。で、このメッセージでさらにググる。すると、configファイルをいじれ、というページに行き当たった。pg_hba.confというファイルで、CentOSの場合(?)、/var/lib/pgsql/8.n/data/pg_hba.confにあった(違ったらfindで探して)。ここからも実は結構悩んだのだが、結論としては、以下の3行を変更する。

70: local all all password
73: host all all 127.0.0.1/32 md5
75: host all all ::1/128 md5

私のバージョンのPostgresについてきたconfigファイルだと、それぞれ70、73、75行目にあるpasswordとmd5をtrustに変更する。

70: local all all trust
73: host all all 127.0.0.1/32 trust
75: host all all ::1/128 trust

この後postgresを再起動すれば、configファイルが新しく読み込まれる。最終的なコマンドは、こんな感じ。

pg_dump -U ユーザ名 -w DB名 > ログファイル名

これをcronが読み込むコマンドファイルに書けば、パスワードを聞かれず、正しくバックアップが取れた。実は長い旅だった。が、やっと出来た。めでたし、めでたし。