我有一个imports
表,其中包含有关已完成的文件导入的信息:idimport(SERIAL PRIMARY KEY
),文件名,导入日期等。
有几个表格有一个字段idimport INTEGER REFERENCES imports(idimport) ON DELETE CASCADE
。
To" unmport"一个文件,我所要做的就是删除imports
表中的行。
我面临的问题是,有些用户告诉我他们肯定导入了一个文件,但没有找到导入数据的痕迹。通常,他们没有导入文件并忘记重新导入它,但我没有证明(除了缺少idimport
远远不够)。
所以我想跟踪已删除的导入。理想情况下,我希望PostgreSQL删除所有子行,保留父行(imports
)行,并将该行标记为已删除,删除它的用户以及删除时(可能是删除)。
我在这里的想法是创建一个ON DELETE
触发器来记住"有趣的" imports
表中的字段,让删除操作运行并重新创建一个imports
行,其中包含有趣的字段(包括idimport
)和我要添加的字段。
但我想要两个"之前" (记忆)和""" (重新创建行)动作,这将是两个触发器,我不知道如何让它们进行通信(有趣的领域)。
当然,我可以做客户端或创建存储过程,但我更喜欢完全集成的解决方案(使用DELETE FROM imports WHERE idimport=12
)
答案 0 :(得分:0)
添加一个审计表,用于记录每次使用触发器删除导入时,而不是使表中包含已删除的行。这个表可以在必要时轻松清除和截断,不会给您的应用带来负担。