Если вы хотите освободить место в файловой системе, вам может помочь VACUUM FULL или CLUSTER. После этого вы также захотите запустить ANALYZE, чтобы убедиться, что у планировщика есть актуальная статистика. Во время этой процедуры ваши таблицы будут полностью заблокированы (операции чтения и записи в этой таблице будут зависать), поэтому вы, вероятно, захотите перевести свое приложение в автономный режим на время.
В PostgreSQL 8.2 и более ранних версиях VACUUM FULL, вероятно, является лучшим выбором.
В PostgreSQL 8.3 и 8.4 команда CLUSTER была значительно улучшена, поэтому VACUUM FULL не рекомендуется - это медленно и будет раздувать ваши индексы. CLUSTER будет заново создавать индексы с нуля и без раздувания. По моему опыту, это обычно тоже намного быстрее. CLUSTER дополнительно отсортирует всю физическую таблицу, используя индекс, поэтому вам нужно выбрать индекс. Если вы не знаете, какой из них, первичный ключ будет работать нормально.
В PostgreSQL 9.0 VACUUM FULL был изменен, чтобы работать как CLUSTER, так что оба хороши.
Трудно делать прогнозы, но на правильно настроенном сервере с обычным оборудованием 9 миллионов строк не должны занимать больше 20 минут.