Что происходит в PostgreSQL, когда выполняется запрос DELETE FROM table без условий?

Когда в PostgreSQL выполняется запрос DELETE FROM table без условий, происходит удаление всех строк из таблицы.

Короткий ответ

Что ответить на собеседовании

Когда в PostgreSQL выполняется запрос DELETE FROM table без условий, происходит удаление всех строк из таблицы.

Подробный разбор

Ответ с пояснениями

Когда в PostgreSQL выполняется запрос DELETE FROM table без условий, происходит удаление всех строк из таблицы.

Что происходит под капотом:

  • Каждая строка помечается как удалённая (dead tuple) в текущем транзакционном контексте.
  • Физическое удаление данных не происходит сразу — PostgreSQL использует MVCC, поэтому старые версии строк остаются до завершения транзакций, которые их видят.
  • Для освобождения места требуется запуск VACUUM, который очищает мёртвые строки.

Отличие от TRUNCATE:

  • DELETE генерирует WAL-записи для каждой удалённой строки, что может быть медленнее.
  • DELETE вызывает триггеры и проверяет ограничения.
  • TRUNCATE быстро очищает таблицу, не вызывая триггеры и не логируя удаление каждой строки.

Поэтому для удаления всех строк обычно рекомендуют TRUNCATE, если не нужны триггеры и откат отдельных строк.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку