← 中文资源

简体中文版本

为软删除添加恢复接口

以标记代替删除、在普通查询中过滤,并提供恢复与清理接口及清晰的保留规则。

阅读英文原文

概述

软删除以纪律换取宽限期:每个读取与约束都必须考虑标记。应刻意提供恢复与清理路径,让恢复成为功能,而非手改数据库。

关键步骤

  1. 添加 deleted_at,以设置它代替执行 DELETE。
  2. 在每处普通读取与计数查询中过滤 deleted_at IS NULL。
  3. 提供恢复接口,在有限窗口内清除 deleted_at。
  4. 运行清理任务,硬删除超过保留窗口的行。

验证

  • 删除行后它从列表中消失。
  • 窗口内恢复可使其回归。
  • 清理会移除超过保留窗口的行。
  • 唯一约束仍允许重建同名记录。

注意事项

  • 软删除让每个查询与约束都要额外过滤,必须一致应用。
  • 它不能替代备份,本身也无法满足法律意义上的删除要求。

适用范围

本条目围绕「为软删除添加恢复接口」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

-- restore within the grace window
UPDATE notes SET deleted_at = NULL
WHERE id = $1 AND deleted_at > now() - interval '30 days';