重置所有表数据但并恢复初始设置

问题描述

我在开发中使用了 Kiwi TCMS System,所以我创建了更多的测试数据。现在我想删除所有的测试数据,所以我尝试按照文章中的建议使用以下命令重置 Kiwi DB 表, https://kiwitcms.org/blog/atodorov/2018/07/30/how-to-backup-docker-volumes-for-kiwi-tcms/

首先进行备份,

docker exec -it kiwi_web /Kiwi/manage.py dumpdata --all --indent 2 > database.json

然后删除所有表记录,

docker exec -it kiwi_web /bin/bash -c '/Kiwi/manage.py sqlflush | /Kiwi/manage.py dbshell'

我知道这个命令已经从数据库中完全删除包括初始设置数据在内的所有内容,所以我尝试使用以下命令应用初始设置,

docker exec -it kiwi_web /Kiwi/manage.py migrate
docker exec -it kiwi_web /Kiwi/manage.py createsuperuser
docker exec -it kiwi_web /Kiwi/manage.py refresh_permissions

前 2 个工作正常,但最后一个 refresh_permissions 抛出错误,参考错误截图

enter image description here

enter image description here

这会导致某些与权限相关的设置(如群组)无法恢复。

似乎我用错误方法删除所有数据并使用所需的初始设置进行恢复。请纠正我这里最好的方法是什么。

解决方法

您收到错误是因为您不了解发生了什么。上面引用的命令和博客文章用于整个数据库的备份和恢复,而不是选择性地删除您不想再存在的信息:

  1. sqlflush 将删除所有表中的所有信息
  2. migrate 将在某些表中创建数据库架构(已经存在)和初始记录。因为 DB 模式已经存在并且最后应用迁移的内部 Django 引用没有改变,所以您会收到“没有应用迁移”消息
  3. 因为没有应用迁移,所以不会创建一些初始记录。在这种情况下,一个具有硬编码名称“管理员”的组。
  4. refresh_permissions 失败,因为它正在寻找名为“Administrator”的组

您可以:

  1. 手动重新创建所有丢失的记录或
  2. 创建 Kiwi TCMS 的全新安装并将其用作您的主实例或
  3. 保留 POC 实例并仅删除您不想要的记录 - 从管理面板中一一删除或通过 manage.py shell 使用 ORM 查询。