18
Аналоги полной очистки
CLUSTER
полностью перестраивает таблицу и все ее индексы
дополнительно физически упорядочивает версии строк
в соответствии с одним из индексов
REINDEX
полностью перестраивает индексы
TRUNCATE
«опустошает» таблицу
Особенности
все команды полностью блокируют работу с таблицей
все команды создают новые файлы для данных
Есть несколько команд, которые работают, используя схожий механизм.
Все они полностью блокируют работу с таблицей, все они удаляют
старые файлы данных и создают новые.
Команда CLUSTER во всем аналогична VACUUM FULL, но
дополнительно физически упорядочивает версии строк в соответствии
с одним из индексов. Это дает планировщику возможность более
эффективно использовать индексный доступ в некоторых случаях.
Однако надо понимать, что кластеризация не поддерживается: при
последующих изменениях таблицы физический порядок версий строк
будет нарушаться.
Команда REINDEX перестраивает индексы, не трогая при этом таблицу.
Фактически, VACUUM FULL использует эту команду для перестроения
индексов. При этом читать таблицу формально не запрещается, однако
планировщик попытается получить блокировку перестраиваемого
индекса, чтобы рассмотреть все планы, и до окончания работы
команды прочитать таблицу фактически не удастся. Вариант REINDEX
CONCURRENTLY работает дольше, но не блокирует индекс и не
мешает чтению и обновлению данных.
Команда TRUNCATE логически работает так же, как и DELETE —
удаляет все табличные строки. Но DELETE, как уже было рассмотрено,
помечает версии строк как удаленные, что требует дальнейшей
очистки. TRUNCATE же просто создает новый, чистый файл. Это
работает быстрее, но надо учитывать, что TRUNCATE заблокирует
работу с таблицей на все время до конца транзакции.