Ответ
VACUUM FULL
в PostgreSQL — это команда обслуживания, которая полностью перестраивает таблицу, удаляя "мертвые" кортежи (строки, ставшие ненужными в результате UPDATE
или DELETE
) и возвращая освободившееся пространство операционной системе.
Ключевые отличия от обычного VACUUM
:
Характеристика | VACUUM | VACUUM FULL |
---|---|---|
Блокировка | Не блокирует чтение/запись (SELECT , INSERT , UPDATE , DELETE ) | Накладывает эксклюзивную блокировку (ACCESS EXCLUSIVE lock ), делая таблицу полностью недоступной на время операции. |
Возврат места | Помечает место как свободное для повторного использования внутри таблицы, но не уменьшает размер файла на диске. | Физически уменьшает размер файла таблицы на диске, возвращая место ОС. |
Ресурсы | Относительно быстрая и легковесная операция. | Очень ресурсоемкая операция, требует дополнительного дискового пространства для создания копии таблицы. |
Пример выполнения:
-- Выполнять с осторожностью!
VACUUM FULL VERBOSE table_name;
Когда использовать:
VACUUM FULL
следует использовать крайне редко, например, после массового удаления значительной части данных из очень большой таблицы, когда необходимо срочно вернуть дисковое пространство.
Для регулярного обслуживания предпочтительнее полагаться на фоновый процесс AUTOVACUUM
, который выполняет работу обычного VACUUM
автоматически и без длительных блокировок.