Sobes.tech
Назад к вопросам
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, если не нужны триггеры и откат отдельных строк.