恢复Django转储

恢复Django转储,django,backup,Django,Backup,我一直在运行Django生产应用程序的每日转储,如下所示: ./manage.py dumpdata --exclude=contenttypes --exclude=auth.Permission -e sessions -e admin --all > data.json 通常情况下,将其恢复到另一个用于开发的安装不会导致问题,但最近尝试恢复数据时导致了以下问题: ./manage.py loaddata -i data.json django.db.utils.Integr

我一直在运行Django生产应用程序的每日转储,如下所示:

 ./manage.py dumpdata  --exclude=contenttypes --exclude=auth.Permission -e sessions -e admin --all > data.json
通常情况下,将其恢复到另一个用于开发的安装不会导致问题,但最近尝试恢复数据时导致了以下问题:

 ./manage.py loaddata -i data.json
 django.db.utils.IntegrityError: Problem installing fixtures: The row in table 'reversion_version' with primary key '1' has an invalid foreign key: reversion_version.content_type_id contains a value '14' that does not have a corresponding value in django_content_type.id.
这向我表明,问题是由于最近在代码库中添加了django reversion引起的,但我不确定原因,也无法找到任何导入备份的方法。一些帖子建议使用自然关键点可能有效,但我会遇到如下错误:

django.core.serializers.base.DeserializationError: Problem installing fixture 'data.json': [u"'maintainer' value must be an integer."]
在本例中,“maintainer”是对models.py中模型定义中这段代码的引用:

maintainer = models.ForeignKey(Organization,related_name="maintainer",blank=True,null=True)
是否有人对如何安装此转储或修改转储过程以生成可复制的转储有任何建议


我注意到生产站点使用Postgres,测试站点使用SQLite,但这以前从来没有出现过问题。

在本地机器上克隆项目并执行类似操作:

  • 在用于创建转储的状态签出项目
  • 创建新的数据库和表
  • 加载转储文件
  • 将代码更新到当前状态
  • 运行迁移
    那是相当痛苦的。修复它的方法似乎是将django_内容_类型作为csv从生产posgres数据库中转储,从生成的csv文件中删除ID,然后在测试版本的SQLite数据库上执行以下操作:

     CREATE TABLE temp_table(a, b, c)
     .mode csv
     .import content_type.csv temp_table
     DELETE FROM sqlite_sequence WHERE name = 'django_content_type'
     DELETE FROM django_content_type
     INSERT INTO django_content_type(name,app_label,model) SELECT * FROM temp_table
    

    这样做的效果是将django_content_type表中的条目ID设置为与转储中的条目ID匹配,从而允许恢复继续进行

    是否使用版本控制系统?是。然而,这项费用是很久以前的事了——直到现在才需要恢复数据。不幸的是,makemigrations声称“没有检测到任何更改”。