Те, кто знаком хотя бы с парой разных окружений баз данных продакшена, скорее всего, знают паттерн «мягкого удаления» (soft deletion) — вместо удаления данных напрямую конструкцией
DELETE
таблицы получают дополнительную временную метку deleted_at
и удаление выполняется конструкцией обновления:UPDATE foo SET deleted_at = now() WHERE id = $1;
Мягкое удаление необходимо для того, чтобы удаление выполнялось безопаснее и было обратимым. После того, как запись удалили «жёстким»
DELETE
, теоретически её всё равно можно восстановить, углубившись в слой хранения, но нужно сказать, что вернуть её очень сложно. В теории, при мягком удалении достаточно снова присвоить deleted_at
значение NULL
, и на этом всё:-- и волшебным образом всё вернулось на место!!
UPDATE foo SET deleted_at = NULL WHERE id = $1;