TGViewer
Бессонный кодер Бессонный кодер @sleeplesscode · 4.25K subscribers
Post #746 2.2K
И снова привет! Продолжаем наши похождения по удалениям.
Мы уже обсудили две важные вещи:
- DELETE — тяжёлая операция;
- после DELETE в базе остаётся мусор.

Возникает логичный вопрос: а как тогда удалять?
И ответ на него одновременно простой и нет — soft delete.


Что такое soft delete
В этой методике мы не удаляем строку, а просто помечаем её как удалённую.

То есть вместо:
DELETE FROM messages WHERE id = 993;

мы делаем:
UPDATE messages
SET deleted_at = now()
WHERE id = 993;


Для приложения запись сразу считается удалённой,
но физически она остаётся в таблице.

Почему это дешевле
1. Мы почти не трогаем индексы
Поле deleted_at обычно не входит в основные индексы,
а значит — меньше модификаций страниц и меньше дисковых операций.

2. Меньше WAL
UPDATE одного поля пишет меньше данных в WAL,
что снижает нагрузку на диск и упрощает репликацию.

3. Меньше блокировок и побочных эффектов
Нет постоянного потока тяжёлых DELETE,
система ведёт себя стабильнее под нагрузкой.

Почему deleted_at, а не is_deleted
Чаще всего используют именно deleted_at timestamptz, потому что:
- известно, когда запись была удалена
- можно откатить удаление по дате
- удобно строить TTL-чистку на основе времени удаления.

«Но ведь строки остаются в таблице»
Да. И в этом весь смысл.

Мы разделяем удаление на два этапа:
1. Быстро и дёшево убираем данные из пользовательского флоу в любой момент времени.
2. Медленно и аккуратно удаляем их физически позже —
например, ночью, когда система нагружена меньше.

И небольшой приятный бонус
Когда пользователь пишет: «Я СЛУЧАЙНО НАЖАЛ УДАЛИТЬ, ВЕРНИТЕ» — у вас уже есть TTL-окно, в которое это можно спокойно сделать 😉

#devblogHowToDeleteInDatabase #tech
  • 👍 37
  • ❤ 14
  • 🙏 3
  • 🎃 1
  • 🦄 1
More from @sleeplesscode
  1. Oct 2, 2026⚡️ JavaScript, архитектура и ИИ: о чем будут говорить на юбилейной HolyJS 2026 Autumn 📆 2…
  2. Oct 1, 2026Post #914
  3. Sep 18, 2026Post #913
  4. Sep 17, 2026Post #912
  5. Sep 15, 2026Post #911
  6. Sep 14, 2026Post #909
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →