【问题标题】:Django 1.8 migrate - relation "django_content_type" already existsDjango 1.8 迁移 - 关系“django_content_type”已经存在
【发布时间】:2015-09-01 18:24:51
【问题描述】:

知道为什么我在尝试迁移时会收到此错误吗?

django.db.utils.ProgrammingError: 关系“django_content_type”

我正在使用 Django 1.8 和 PostgreSql

【问题讨论】:

标签: django postgresql django-1.8


【解决方案1】:

迁移时您将需要使用--fake-initial 选项;它曾经是隐含的,但现在已经明确了:

https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-option---fake-initial

引用:

此选项适用于首次运行迁移 预先存在迁移使用的数据库。

祝你好运!

【讨论】:

  • 感谢您的帮助@FlipperPA,但迁移仍然没有发生。现在我看到了:django.db.utils.ProgrammingError: column "name" of relation "django_content_type" does not exist。有任何想法吗?是否只是手动创建的问题?
  • 我不确定到底是什么问题,但在 Django 1.8 中,ContentType 上的“名称”字段已成为一个属性。这给我们在开发中迁移到 1.8 时造成了问题,而有些人仍在使用 1.7。 docs.djangoproject.com/en/1.8/ref/contrib/contenttypes/… 希望这能帮助您指明正确的方向?
  • 再次感谢伙计,我认为我的迁移已经完成,我在数据库上还有一些手动工作要做。将检查链接。干杯!
  • 或者只是删除整个数据库表并重新开始。
【解决方案2】:

@Josh 的解决方案对我进行了以下更改。在第 1 步之前,我重新添加了缺失的列:

ALTER TABLE django_content_type ADD COLUMN name character varying(50) NOT NULL DEFAULT 'run migrate.py';

运行python manage.py migrate auth 会删除此列,可能是在之前的migrate 运行中进行了一项或多项失败的其他更改。

在步骤 3 中运行 migrate 时,我包含了 --fake-initial 标志:

python manage.py migrate --fake-initial

似乎一切都恢复正常了。

【讨论】:

    【解决方案3】:

    这对我有用:

    1. ./manage.py migrate auth --fake-initial(这会引发错误但忽略它)

    2. ./manage.py migrate --fake-initial

    【讨论】:

    • 这对我有用。但为什么?你能解释一下吗??
    • @cjahangir 遗憾的是没有。我还没有深入了解问题所在。只有在我迁移 1.6 之前的旧代码时才会发生这种情况,所以我只是在它工作后才开始做更大的事情。
    【解决方案4】:

    和许多人一样,我并不真正理解这个问题。我能够设计出适合我的解决方案。

    1. 注释掉所有自定义安装的应用程序。所以,你只有 Django 的东西。
    2. 仅迁移身份验证:./manage.py migrate auth
    3. 迁移其他所有内容:./manage.py migrate
    4. 撤消步骤 1。
    5. 迁移您的所有应用:./manage.py migrate

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 2018-04-07
      • 1970-01-01
      • 2015-10-17
      • 2015-11-16
      • 2016-10-18
      • 2015-04-28
      • 2013-02-04
      • 2012-09-18
      相关资源
      最近更新 更多