Sobes.tech
Senior

Que se passe-t-il dans PostgreSQL lorsqu'une requête DELETE FROM table sans conditions est exécutée?

sobes.tech IA

Réponse de l'IA

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

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

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

Отличие от TRUNCATE:

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

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