【问题标题】:How can I resolve 'django_content_type already exists'?如何解决“django_content_type 已存在”?
【发布时间】:2015-04-21 00:30:58
【问题描述】:

升级到 django 1.8 后,我在迁移过程中收到错误消息:

ProgrammingError: relation "django_content_type" already exists

我会对这个错误背后的背景感兴趣,但更重要的是, 我该如何解决?

【问题讨论】:

    标签: python django


    【解决方案1】:

    有时可以使用 --fake-initial 解决项目的初始迁移问题

    python manage.py migrate --fake-initial
    

    这是 1.8 中的新功能。在 1.7 中,--fake-initial 是隐式默认值,但在 1.8 中是显式的。

    来自文档:

    --fake-initial 选项可用于允许 Django 跳过应用程序的初始迁移,如果该迁移中所有具有由所有 CreateModel 操作创建的所有模型名称的数据库表已经存在。此选项适用于首次对已使用迁移的数据库运行迁移时使用。但是,此选项不会检查匹配表名之外的匹配数据库架构,因此只有在您确信现有架构与初始迁移中记录的架构匹配时才能安全使用。

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

    【讨论】:

    • 有什么方法可以让manage.py migrate 命令同时适用于现有数据库和新数据库?
    • @RobinWinslow 如果您想要 1 个始终有效的命令,附加 --fake-initial 标志始终应该有效。
    • 在 django 2.1 中没有帮助。错误更改为column "name" of relation "django_content_type" does not exist
    • 当你伪造迁移时,如果完成了新的更改,它们将不会被应用
    【解决方案2】:

    我在 Ubuntu 18.04 + Postgres 10.10 版本上托管的 Django 2.2.7 或 Django 3.0 上解决了这个问题。

    1. 在 Postgres 数据库中恢复数据库(为此使用了 pgAdmin 工具)
    2. (virtualenv)python manage.py loaddata dumpfile.json
    3. 从数据库中删除 django_migrations 表(为此使用了 pgAdmin 工具)
    4. (virtualenv)python manage.py makemigrations
    5. (virtualenv)python manage.py migrate --fake
    6. (virtualenv)python manage.py 迁移
    7. (virtualenv)python manage.py collectstatic
    8. (virtualenv)python manage.py runserver 0.0.0.0:8000

    【讨论】:

    • 这对我有用,除了python manage.py collectstatic 命令
    【解决方案3】:

    我在该特定数据库上向用户授予了所有权限,它解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2015-12-13
      • 2022-11-15
      相关资源
      最近更新 更多