在 postgres 中隐藏行

teg*_*ggy 2 postgresql rows hide

我决定不从 postgres 数据库中删除行,而是隐藏这些行,以便在意外删除行的情况下,我仍然可以检索它们。从数据库隐藏行的最佳方法是什么?您是否建议创建一个名为“Active”的列,并将其值设置为 1 或 0,1 表示活动,0 表示删除和隐藏。如果重要的话我也在使用 sqlalchemy 。

zap*_*bln 5

您可以隐藏真实的表,创建视图并使用规则进行插入、更新和删除。

假设您有一个会话表。我将创建一个名为session_table 的表,其中包含所有数据和“活动”列。然后你有一个名为 session 的视图(CREATE view session AS SELECT [all fields without active] FROMSessions_table WHERE active = TRUE),正如 Greg 提到的。

现在你可以创建一个规则:如果你想删除会话中的一行,你想更新sessions_table中的一行:

创建规则delete_session ON 删除会话执行更新sessions_table SET active = FALSE WHERE id = OLD.id;

要插入,您需要:

创建规则 insert_session ON INSERT TO 会话 执行 INSTEAD INSERT INTO session_table (..., active) VALUES(..., TRUE);

最后我们有

在更新会话时创建规则 update_session 执行 INSTEAD UPDATEsession_table SET ... WHERE id = new.id AND active = TRUE;

现在,您可以完全在会话上调用工作,而不必费心处理活动列。