Ответ
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 автоматически и без длительных блокировок.
Ответ 18+ 🔞
А, слушай, про эту вашу команду VACUUM FULL в Постгресе. Ну, это такая штука, которая берёт твою таблицу, выворачивает её наизнанку, вытряхивает оттуда весь мусор — эти самые «мёртвые» строки, которые после апдейтов и удалений болтаются как призраки — и отдаёт освободившееся место обратно системе, нахуй.
Чем она не в падлу отличается от простого VACUUM:
| Прикол | VACUUM |
VACUUM FULL |
|---|---|---|
| Блокировка | Работает тихо, не мешая никому — читай, пиши, хуячь. | Вешает на таблицу такой полный и беспросветный лок, что к ней даже посмотреть нельзя. Всё встаёт, пиздец. |
| Место на диске | Освобождает место, но только внутри самой таблицы, для своих нужд. Файл на диске не уменьшится, ёпта. | Физически сжимает файл таблицы до минимального размера и честно отдаёт место винту. |
| Затратность | Быстро, почти незаметно. | Овердохуища ресурсов жрёт, требует места для копии таблицы, долго, муторно. |
Как запустить, если совсем припёрло:
-- Делай это, только если готов к последствиям, мудила!
VACUUM FULL VERBOSE table_name;
Когда это вообще нужно?
Использовать VACUUM FULL — это как вызывать сапёров, чтобы муху прихлопнуть. Крайне редко, блядь. Например, если ты только что вынес нахуй 90% данных из огромной таблицы и тебе срочно нужно место на диске обратно.
А для повседневной жизни — расслабься и положись на AUTOVACUUM. Он сам, в фоне, без твоего участия и без этих ебанутых блокировок всю грязную работу сделает.