使用 Ecto 和 PostgreSQL 进行软删除

主要观点:

  • 客户向 Dashbit 咨询在 Phoenix + Ecto 应用中实现软删除的不同方式。
  • 介绍了在数据库中实现软删除的方法,包括使用 PostgreSQL 规则和视图。
  • 讨论了该方法的注意事项,如 Ecto 对删除操作的处理、索引和约束等问题。
  • 提供了在需要时有效删除数据的方法。

关键信息:

  • 在资源表中添加deleted_at列(可为 timestamp 类型或 boolean 类型)。
  • 创建 PostgreSQL 规则将删除转换为更新,设置deleted_at列。
  • 创建视图visible_orders,只包含未删除的订单。
  • Ecto 处理表和模式为不同实体,可通过不同方式查询。
  • 注意事项包括 Ecto 对删除操作的报错处理、索引和约束等。
  • 可使用 PostgreSQL 机制启用和禁用规则来实现有效删除数据。

重要细节:

  • 在迁移中添加列和规则的代码示例。
  • 创建视图的代码示例及在 Ecto 模式中的使用。
  • 处理 Ecto 对删除操作报错的方式,如allow_stale: true
  • 关于索引和约束的部分,提到部分索引及对其的处理。
  • 提供封装的函数disable_soft_deletion用于在事务中禁用和启用规则。
阅读 19
0 条评论