これまではSQL形式でバックアップしたデータをリストアするのにpsql使ってても、遅くてもまあ我慢できるかなという感じだったのだが、今回psqlのリストアで4時間以上かかってしまったので今更postgresのバックアップ・リストア方法を調査した。
pg_dumpallというDBをまるまるバックアップするコマンドがあるので、これなら速いのでは?と思ってやったら結局SQL形式だったので上記のとおり遅かった。psqlの画面出力が遅い原因か?とpsql -qと出力を抑制してもダメだった。
そしてなんとpg_dumpallってSQL形式しかサポートしてないというビックリ仕様だった。
なのでググッてカスタム形式とtar形式があるというので比較してみた。
timeコマンドで時間を計ってみる。
postgres@realpc:~$ time pg_dump -Fc testdb > dbFc.dump
postgres@realpc:~$ time pg_dump -Ft testdb > dbFt.tar
メモ忘れたが、実時間でカスタム形式が5分でtar形式が2分くらいだったかな。
それをそれぞれリストアした。(DBをわざわざcreateしなくても良い)
postgres@container:~$ time pg_restore -C -d postgres < dbFc.dump
real 6m31.718s
user 0m44.595s
sys 0m11.117s
postgres@container:~$ dropdb testdb
postgres@container:~$ time pg_restore -C -d postgres < dbFt.tar
real 4m36.913s
user 0m26.373s
sys 0m11.919s
これなら速いけど、実はリストアするときにpostgres.confでsync=offを指定して再起動する必要がある。
それをしなかったら30分たっても終わらなかったので強制終了した。
なので、元に戻すのを忘れないようにしなければいけない。これうっかり忘れるんじゃないだろうか。というか、これ書くのに実際忘れてたのを思い出した。あぶねー。
リストアのオプションにあればいいのに。
pg_dumpallというDBをまるまるバックアップするコマンドがあるので、これなら速いのでは?と思ってやったら結局SQL形式だったので上記のとおり遅かった。psqlの画面出力が遅い原因か?とpsql -qと出力を抑制してもダメだった。
そしてなんとpg_dumpallってSQL形式しかサポートしてないというビックリ仕様だった。
なのでググッてカスタム形式とtar形式があるというので比較してみた。
timeコマンドで時間を計ってみる。
postgres@realpc:~$ time pg_dump -Fc testdb > dbFc.dump
postgres@realpc:~$ time pg_dump -Ft testdb > dbFt.tar
メモ忘れたが、実時間でカスタム形式が5分でtar形式が2分くらいだったかな。
それをそれぞれリストアした。(DBをわざわざcreateしなくても良い)
postgres@container:~$ time pg_restore -C -d postgres < dbFc.dump
real 6m31.718s
user 0m44.595s
sys 0m11.117s
postgres@container:~$ dropdb testdb
postgres@container:~$ time pg_restore -C -d postgres < dbFt.tar
real 4m36.913s
user 0m26.373s
sys 0m11.919s
これなら速いけど、実はリストアするときにpostgres.confでsync=offを指定して再起動する必要がある。
それをしなかったら30分たっても終わらなかったので強制終了した。
なので、元に戻すのを忘れないようにしなければいけない。これうっかり忘れるんじゃないだろうか。というか、これ書くのに実際忘れてたのを思い出した。あぶねー。
リストアのオプションにあればいいのに。
※コメント投稿者のブログIDはブログ作成者のみに通知されます