PostgreSQL は、特定の場合に B-tree インデックスページを再利用することができません。問題は、インデックス付けされた行が削除されると、そのインデックスページは同様の値を持つ行でしか再利用できないことです。たとえば、インデックス付けされた行が削除された後に、新しく挿入/更新された行が削除された行よりもかなり高い値を持っている場合、新しい行は削除された行で使われていたインデックススペースを使用することができません。そのかわり、そのような新しい行は新しいインデックスページ上に置く必要があります。このようなケースでは、VACUUM が頻繁に実行されていても、インデックスが使用するディスクスペースが無制限に増えていきます。
解決策として、REINDEX コマンドを定期的に実行し、削除された行で使用されていたページを破棄することができます。contrib/reindexdb を使用してデータベース全体のインデックスを再作成することもできます。