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 してやればいいじゃんて? えー。
ほとんどはうまくいった。当たり前だけど permission とかの理由じゃないよ。 ↩