升级到django 1.8后,我在迁移过程中收到错误消息:
ProgrammingError: relation "django_content_type" already exists
我会对这个错误的背景感兴趣,但更重要的是,我该如何解决呢?
Answers:
使用--fake-initial有时可能会在项目上进行初始迁移
python manage.py migrate --fake-initial
它是1.8中的新功能。在1.7中,--fake-initial是隐式默认值,但在1.8中是显式默认值。
从文档中:
如果使用该迁移中所有CreateModel操作创建的所有模型的名称的所有数据库表均已存在,则--fake-initial选项可用于允许Django跳过应用程序的初始迁移。此选项适用于首次对已预先使用迁移的数据库运行迁移时使用。但是,此选项不检查匹配表名之外的匹配数据库模式,因此只有在确信现有模式与初始迁移中记录的内容相匹配时,才可以安全使用。
https://docs.djangoproject.com/zh-CN/1.8/ref/django-admin/#django-admin-option---fake-initial
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迁移--fake
- (virtualenv)python manage.py迁移
- (virtualenv)python manage.py collectstatic
- (virtualenv)python manage.py运行服务器0.0.0.0:8000
manage.py migrate
在现有数据库和新数据库上运行一个命令?