タグ

2008年12月9日のブックマーク (1件)

  • PostgreSQL VACUUM FULLせずに不要領域を削除する

    PostgreSQLではDELETEしたレコードは物理的には削除されずそのまま残り続けます。テーブル自体のサイズ(容量)を削減するにはDELETEした後にVACUUM FULLを行う必要があります。 このVACUUM FULLはテーブルへの書き込みロックがかかります。また数GクラスのテーブルへのVACUUM FULLは数時間かかることがあるので、常時書き込みがあるテーブルへは処理を行うタイミングが難しいです。 そこでVACUUM FULLを行わずに不要領域を削除(テーブルサイズを減らす)する方法を考えました。 方法は単純で「テーブルを新たに作って、そちらにデータを移行する」だけです。流れとしては以下のようになります。 不要領域を削除するテーブル(移行元テーブル)と同じレイアウトのテーブルを作成する(移行先テーブル) 移行先テーブルにレコードを移行する 移行先テーブルにインデックスを設定する