如何安全清理aposDocVersion表仅保留最近两次commit记录
aposDocVersions表冗余记录清理方案
关联关系说明
aposDocVersions表和apostrophe-workflow模块直接关联,模块的submit、commit逻辑的底层数据都存在这张表中,你未使用版本历史功能的情况下,清理旧记录不会影响现有业务逻辑的正常运行。
安全清理步骤
操作前务必先全量备份数据库,建议先在测试环境验证操作效果,再在生产环境执行。
方案1:使用官方原生命令(推荐,安全性最高)
Apostrophe的workflow模块自带版本清理工具,直接执行以下命令即可自动保留每个文档最近2次commit记录,删除其余所有冗余版本:node app apostrophe-workflow:cleanup --keep=2
命令执行过程中会自动处理关联数据,不会出现手动SQL操作可能引发的外键、数据关联错误。
方案2:手动SQL清理(适合对表结构熟悉的场景)
如果需要自定义清理逻辑,可以通过SQL操作,先查询确认待删除的条目数量是否符合预期:
SELECT COUNT(*) FROM aposDocVersions v1 WHERE ( SELECT COUNT(*) FROM aposDocVersions v2 WHERE v2.docId = v1.docId AND v2.createdAt >= v1.createdAt ) > 2;
确认数量无误后执行删除操作:
DELETE v1 FROM aposDocVersions v1 INNER JOIN aposDocVersions v2 ON v1.docId = v2.docId AND v2.createdAt >= v1.createdAt GROUP BY v1.id HAVING COUNT(*) > 2;
后续操作
清理完成后重启Apostrophe服务刷新缓存即可,现有已发布内容、submit/commit流程都不会受影响。
内容的提问来源于stack exchange,提问作者jansensan
相关产品推荐
相关产品推荐

