pg_repack
肥大化したテーブルとインデックスを、ロックせずに再構築する PostgreSQL の拡張。終わるまでテーブルをロックし続ける VACUUM FULL の代替である。
通常の VACUUM は死んだ領域を再利用するが、OS には返さない。そのため、大量更新で膨らんだテーブルは大きいままになる。VACUUM FULL や CLUSTER は全体を書き直して解決するが、排他ロックを取るので、その間テーブルが使えない。本番DBでは事実上、実行できないということだ。pg_repack はバックグラウンドでコピーを作り、並行する変更をトリガーとログテーブルで捕捉して適用し、最後にごく短いロックでファイルを入れ替える。代償は、実行中にテーブルの2つ目のコピー分のディスク容量が要ることである。