LargeObjectが大量すぎでvacuumdb –full ができなかった時の対処法

金曜日, 5月 27th, 2011

こんにちは、なかわけです。

珍しくPostgresの話です。
管理しているとあるデータベースで、LargeObjectが大量に保存されてました。大量すぎて大変になってきたので、一部のLO管理を止めてファイル管理にするように移行しました。移行後に削除したLO分の容量を解放すべくフルバキュームを行ったのですが、強制終了やほかのプロセスにより中断されましたという謎のエラーでフルバキュームが完了しませんでした。

困った挙句、試しにLOを含めるようにダンプ(バックアップ)をおこなったところ、削除したLO以外のダンプファイルを作ることができました。コマンドは、以下のような感じですね:

pg_dump data_base_name -b -o -Fc > backup.pgdmp

このダンプファイルをリストアしたら、残りのLOとデータが復元できました。どうやらダンプファイルを作る際に削除フラグのついたデータはダンプファイルに含めないように処理されているようです(検証の方法がわからないので正確ではないかもしれませんが)。

LOが大量でバキュームできないなんで状況がまずほとんどないと思いますが困った方がいらしたら試してみてくださいー。

Tags: ,

Leave a Reply

*