【发布时间】:2022-01-17 15:56:23
【问题描述】:
我在 django 中有一个相当大的代码库,有几个应用程序,在某些时候我遇到了一个问题:每次我更改或添加模型并尝试进行迁移时,都会出现错误:django.db.utils。 ProgrammingError:关系“appname_modelname”已经存在。问题已经持续了一段时间 - 迁移文件总是在相同的编号下创建 - 0114(顺便说一下,我找不到这个文件),并且所有新的修复程序都与以前的修复程序一起记录在其中,这就是问题不断扩大的原因,就像滚雪球一样。
我不想深入研究解决方案,只是手动从数据库中删除了所有创新 - 导致“已经存在”冲突出现的所有内容。因此,为了使迁移成功,我不得不手动删除我在出现此问题后创建的所有模型或表字段。但是现在我开始使用此代码在 prod 中工作并用数据填充它,并且不再可能从相应的表中删除所有数据。我不知道为什么会出现这个问题以及如何解决它,非常感谢您的建议。
我试图制作一个假的,但很明显,我需要的修复程序根本没有进入数据库。 我对造成这种情况的原因有一个假设:我有三个 docker 容器,一个 api 和两个用于 celery。在api容器中,我在启动时将命令写在bash文件中
python3 /usr/srv/h_api/src/manage.py makemigrations && python3 /usr/srv/h_api/src/manage.py migrate
而不是
python3 /usr/srv/h_api/src/manage.py makemigrations
所以我不必每次都手动进行。我不明白为什么,但从时间的巧合来看,问题似乎是因为这个而开始的。自从我把那条线改回来已经有几个星期了,但问题仍然存在。
如何将之前的更改提交到数据库并让 django 创建下一个编号为 0115 的迁移文件?
【问题讨论】:
-
您是否尝试过伪造 0114,然后进行迁移以创建 0115?
-
@mendespedro 刚试过。我为一个模型做了一个测试场。是否 ...migrate --fake,然后再次进行迁移。收到响应“未检测到更改”。但是,当我尝试在管理面板中打开这个模型时,发生了编程错误,因为这个字段不在数据库中。
-
@mendespedro 之后,我删除了这个字段,重建了容器,一开始,makemigrations 再次制作了 0114 文件,一切都与我上次假迁移的一样
标签: python django postgresql migration