升级到django 1.8后,我在迁移过程中收到错误:
ProgrammingError: relation "django_content_type" already exists
我对此错误背后的背景感兴趣,但更重要的是, 我该如何解决?
答案 0 :(得分:112)
项目的初始迁移有时会使用--fake-initial
来解决问题python manage.py migrate --fake-initial
这是1.8中的新功能。在1.7中, - fake-initial是一个隐式默认值,但在1.8中是显式的。
来自文档:
如果所有具有该迁移中所有CreateModel操作创建的模型名称的数据库表已存在,则可以使用--fake-initial选项允许Django跳过应用程序的初始迁移。此选项适用于首次针对预先存在使用迁移的数据库运行迁移时使用。但是,此选项不会检查匹配的表名称之外的匹配数据库模式,因此只有在您确信现有模式与初始迁移中记录的模式匹配时才可以安全使用。
https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-option---fake-initial
答案 1 :(得分:0)
我向该特定数据库的用户授予了所有特权,从而解决了该问题。
答案 2 :(得分:0)
我在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 migration --fake
- (virtualenv)python manage.py migration
- (virtualenv)python manage.py collectstatic
- (virtualenv)python manage.py runserver 0.0.0.0:8000