使用 PostgreSQL 在整个数据库中实现软删除

问题描述 投票:0回答:1

我面临着在整个数据库中实施软删除的任务。到目前为止,我知道的唯一方法是向每个表添加一个新列(例如:

isDeleted
)。维护这一点非常不愉快,因为您必须检查要查询的记录是否已删除以及实现自己的级联逻辑。此外,在使用外键时,您必须检查引用的记录是否未被删除。

所有这些,正如我所说,维护起来非常不愉快,因此我正在寻找新的方法来在 PostgreSQL 中实现软删除。

如果您有任何建议,请告诉我。我想主要在服务器端实现这一点,而不是在客户端。

谷歌搜索了很多!阅读很多文章。

database postgresql logic implementation
1个回答
0
投票

您可以利用像 acts_as_paranoid 这样的现成法师宝石,它可以通过将

default_scope
添加到您的模型中来发挥作用(https://github.com/ActsAsParanoid/acts_as_paranoid/blob/master/lib/acts_as_paranoid.rb#L48)。

另一种方法是实际删除记录,但有另一种解决方案将它们保留在不同的位置。像 papertrail 这样的东西可以实现这一点:它将模型的每个更改保存在单独的表中,并允许您恢复以前的版本(即使在删除之后)。

机器人是一种权衡。保留记录并将其标记为已删除更简单,但您会面临错误的风险(

default_scope
是附加的,但有人可以使用
uscoped
并向您的用户显示“软删除”记录)。 第二个选项更安全,但如果更改模型或列名称 - 您需要考虑迁移
papertrail
表中的条目以保留功能。

© www.soinside.com 2019 - 2024. All rights reserved.