【问题标题】:django.db.utils.ProgrammingError: relation "django_site_domain_v2339b81_uniq" already existsdjango.db.utils.ProgrammingError:关系“django_site_domain_v2339b81_uniq”已经存在
【发布时间】:2018-11-08 01:00:25
【问题描述】:

我在尝试迁移时收到此错误。我试图通过这样做来解决Site does not exist 错误:

python manage.py migrate --fake sites zero
python manage.py showmigrations
sites
 [ ] 0001_initial
python manage.py migrate --fake-initial

但是这并没有解决问题。知道如何解决此错误:

django.db.utils.ProgrammingError: 关系 “django_site_domain_v2339b81_uniq”已经存在

编辑

这是showmigrations 显示的内容:

sites
 [X] 0001_initial
 [ ] 0002_alter_domain_unique

我相信这可能是错误

【问题讨论】:

  • 你为什么要伪造迁移?您尝试通过执行此操作解决的原始错误是什么/
  • 是的,这是一个错误。原来的错误是Site does not exist。我相信我的SITE_ID 是错误的。但是,如果您想查看,我已经在我的编辑中更新了我的代码。
  • 我仍然不明白您的原始问题以及为什么它与迁移有关。网站不存在仅仅意味着缺少数据。您可能只需将您的站点名称添加到站点表中。
  • 该站点已经在表中,带有它的名称和域。我也在设置中使用for i in Site.objects.all(): print(i, i.domain, i.name, i.id) >>> mysite.com mysite.com mysite.com 2 - SITE_ID = 2 检查了我的shell。
  • 0002_alter_domain_unique 迁移文件中有什么内容?

标签: python django


【解决方案1】:

看起来您的数据库已经迁移到迁移 0002。

运行python manage.py migrate --fake sites 0002 - 看看这是否能解决问题。

【讨论】:

  • 可以,谢谢!你能解释一下Looks like your DB is already migrated till the migration 0002 的意思吗?
  • 哦,所以您的迁移 0002 试图添加某种独特的约束。这从 mysql 错误django_site_domain_v2339b81_uniq 已经存在中可以清楚地看出。这告诉我唯一约束已经存在,这意味着此迁移已经运行。
  • 警告:如果这个迁移文件做的不止一件事,也许还创建了一个模型 A,并且在创建模型之前无论出于何种原因在两者之间失败,那么你的伪造将导致更多错误。假设在唯一约束之后,您创建了表 A,但在两个步骤之间迁移失败。现在你已经伪造了它,django 假设表 A 也被创建了,而实际上它没有。
  • 那么以后如果我只伪造showmigrations中未选中的框,我应该不会有任何问题?
  • 未选中的框表示迁移尚未运行。它本身并不大。你不知何故达到了不一致的状态,可能是通过重新生成迁移或从其他地方替换数据库。
猜你喜欢
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2018-05-11
相关资源
最近更新 更多