django迁移地狱,丢了一张桌子。试图找回它
Posted
技术标签:
【中文标题】django迁移地狱,丢了一张桌子。试图找回它【英文标题】:django migration hell, dropped a table. Tried to get it back 【发布时间】:2017-06-04 11:36:29 【问题描述】:所以我在我的数据库中删除了一个表,我想要它回来。重新运行迁移给出了错误表不存在。经过一番打猎后,我了解到我可以删除 django_migrations 中应用程序名称为我的应用程序的所有内容。所以我这样做了,重新运行它开始工作的迁移,然后抱怨没有删除的表。
我不知道如何才能重新获得一张桌子并保持一切原样......无论如何要这样做?
我不关心数据库中 90% 的数据,只关心几个表和字段。我删除的表我不关心数据。
【问题讨论】:
【参考方案1】:您可以使用sqlmigrate 命令打印 Django 将执行的 SQL 命令。然后,您可以选择重新创建已删除的表所需的命令并手动应用它们。
一旦所有表都重新就位,您可以使用migrate <app_name> --fake
转发迁移历史记录,因此 Django 知道应用了此应用中的迁移。
【讨论】:
运行了这个 django-admin sqlmigrate swsite mymigration 它给出了一个错误:django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE,但未配置设置。您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()。叹。这一切都是因为 postgres 存在时区问题。 运行python manage.py sqlmigrate
。你可以使用django-admin
,但是你需要显式配置设置模块。
该命令表示参数不足。它想要更像应用程序名称和迁移名称,我想我可以单独运行它们?【参考方案2】:
首先检查django_migrations
表。它包含有关哪些迁移已运行的数据。将此数据与实际迁移文件进行比较,以了解哪些已运行或未运行。
最后,不要害怕删除 django_migrations
中的行并修改您的原始迁移文件以重新创建您需要的表。
【讨论】:
如果我手动运行迁移文件中的依赖关系,我可以删除它们吗? 是的,只要你的迁移最终是幂等的(你可以继续运行它们并且没有任何改变),你就可以了。以上是关于django迁移地狱,丢了一张桌子。试图找回它的主要内容,如果未能解决你的问题,请参考以下文章