【发布时间】:2015-04-21 00:30:58
【问题描述】:
升级到 django 1.8 后,我在迁移过程中收到错误消息:
ProgrammingError: relation "django_content_type" already exists
我会对这个错误背后的背景感兴趣,但更重要的是, 我该如何解决?
【问题讨论】:
升级到 django 1.8 后,我在迁移过程中收到错误消息:
ProgrammingError: relation "django_content_type" already exists
我会对这个错误背后的背景感兴趣,但更重要的是, 我该如何解决?
【问题讨论】:
有时可以使用 --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 命令同时适用于现有数据库和新数据库?
column "name" of relation "django_content_type" does not exist
我在 Ubuntu 18.04 + Postgres 10.10 版本上托管的 Django 2.2.7 或 Django 3.0 上解决了这个问题。
- 在 Postgres 数据库中恢复数据库(为此使用了 pgAdmin 工具)
- (virtualenv)python manage.py loaddata dumpfile.json
- 从数据库中删除 django_migrations 表(为此使用了 pgAdmin 工具)
- (virtualenv)python manage.py makemigrations
- (virtualenv)python manage.py migrate --fake
- (virtualenv)python manage.py 迁移
- (virtualenv)python manage.py collectstatic
- (virtualenv)python manage.py runserver 0.0.0.0:8000
【讨论】:
python manage.py collectstatic 命令
我在该特定数据库上向用户授予了所有权限,它解决了这个问题。
【讨论】: