主要观点:
- 客户向 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
用于在事务中禁用和启用规则。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。