PostgreSQLデータベースがディスクを圧迫したので(その後)
2009/07/21 | PostgreSQL
PostgreSQLを長期間vacuumせず放置してディスクを浪費した件で、対処方法を調べたのでメモ。
一番簡単なのはvacuumをかけることだが、vacuumをかけるにはディスク容量を必要とする。例えばデータベース容量が膨れ上がって2GBになってしまったが実際は1GB程度のデータベースだったと仮定する。このデータベースにvacuumをかける際、ディスクの空き容量として1GB程度が必要になる(らしい)。しかもvacuumには時間がかかりそう。多分、いったんデータベースがダンプされ、データベースを削除し、ダンプされたデータベースから復旧する、というイメージなんだと思う。
とりあえず実際のデータベース容量がわからず、かつ膨れ上がったデータベース(テーブル)がテンポラリ用途で使用していたので、不要な行をすべて削除してからダンプした。ほとんどファイル構造だけのダンプなので数十キロバイトですんだ。その後dropdbでデータベースを削除した。2GB強のデータベースだったが、数秒で削除された。その後、データベースを再作成して、ダンプデータから復旧。これで復旧できた。空き容量もしっかり確保できた。
データベースは適当に運用しちゃだめだね。