乐闻世界logo
搜索文章和话题

PostgreSQL 如何从 TypeORM 中获取软删除实体?

1个答案

1

在处理PostgreSQL数据库中的软删除实体时,通常的做法是在表中设置一个标志列,比如 is_deleteddeleted_at。这样,当一个实体被“删除”时,并不是真正从数据库中删除这一条记录,而是更新这个标志字段。接下来,我将详细解释如何从这样的设置中检索软删除的实体,并提供相关的SQL查询示例。

1. 使用 is_deleted 标志

假设我们有一个名为 employees 的表,其中包含一个名为 is_deleted 的布尔类型列。当一个员工被软删除时,is_deleted 会被设置为 true

要获取所有被软删除的员工,我们可以使用以下SQL查询:

sql
SELECT * FROM employees WHERE is_deleted = true;

这条查询会检索所有 is_deleted 字段为 true 的记录,即所有被软删除的员工。

2. 使用 deleted_at 时间戳

另一种常见的做法是在表中使用一个 deleted_at 列,这是一个时间戳类型的列。当记录被软删除时,这个列会被设置为软删除发生的具体时间,而非软删除的记录这一列保持为 NULL

在这种情况下,要获取所有被软删除的实体,可以使用以下SQL查询:

sql
SELECT * FROM employees WHERE deleted_at IS NOT NULL;

这条查询会选择所有 deleted_at 字段不是 NULL 的记录。

示例

假设我们有一个员工表 employees,其中包括字段 id, name, is_deleted, 和 deleted_at

sql
CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100), is_deleted BOOLEAN DEFAULT false, deleted_at TIMESTAMP );

软删除一个员工的操作可能如下:

sql
-- 使用 is_deleted 标志软删除 UPDATE employees SET is_deleted = true WHERE id = 1; -- 使用 deleted_at 时间戳软删除 UPDATE employees SET deleted_at = NOW() WHERE id = 2;

然后,使用之前提到的查询来获取所有软删除的员工:

sql
-- 获取所有 is_deleted 为 true 的员工 SELECT * FROM employees WHERE is_deleted = true; -- 获取所有 deleted_at 不为 NULL 的员工 SELECT * FROM employees WHERE deleted_at IS NOT NULL;

这些方法可以有效地帮助我们管理和查询软删除的实体,从而在不完全删除数据的情况下,保持数据库的完整性和历史记录的追踪。

2024年8月3日 18:46 回复

你的答案