Назад к вопросам
Senior
4
Что происходит в PostgreSQL, когда выполняется запрос DELETE FROM table без условий?
Компании, где спрашивали
Lenta Tech
Ответ от нейросети
sobes.tech AI
Когда в PostgreSQL выполняется запрос DELETE FROM table без условий, происходит удаление всех строк из таблицы.
Что происходит под капотом:
- Каждая строка помечается как удалённая (dead tuple) в текущем транзакционном контексте.
- Физическое удаление данных не происходит сразу — PostgreSQL использует MVCC, поэтому старые версии строк остаются до завершения транзакций, которые их видят.
- Для освобождения места требуется запуск
VACUUM, который очищает мёртвые строки.
Отличие от TRUNCATE:
DELETEгенерирует WAL-записи для каждой удалённой строки, что может быть медленнее.DELETEвызывает триггеры и проверяет ограничения.TRUNCATEбыстро очищает таблицу, не вызывая триггеры и не логируя удаление каждой строки.
Поэтому для удаления всех строк обычно рекомендуют TRUNCATE, если не нужны триггеры и откат отдельных строк.