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