pg_dump は custom format がよいのか?

pg_dump dbname > file

で plain text に吐いておいた dump ファイルを、バージョンアップした DB で

psql dbname < file

しても、どうしても一部 restore できないものが残った1。これを

pg_dump -Fc dbname > file

で custom format で dump し、

pg_restore -Fc -d dbname file

で restore したらうまくいった。単に pg_restore が psql よりうまく restore してくれるのかもと思ったけど、pg_restore は plain text の dump ファイルを食べてくれないので検証のしようがない。

ちなみに、中でエンコーディングの狂っているデータがあるのかと思ってみたら iconv は確かに不正なシーケンスを見つけてくれたが、それを除去しても結果は同じだった。

さらにちなみに、作成した database に psql で接続して psql 上で

\lo_import filename

……はしなかった。やってみろて? だってこれ使いにくいもんなぁ…。schema だけ restore してやればいいじゃんて? えー。

  1. ほとんどはうまくいった。当たり前だけど permission とかの理由じゃないよ。 

More