关系不存在,在 PostgreSQL、Django 中

Relation does not exist, in PostgreSQL, Django

所以我在 Django 中创建了一个新模型,然后以正确的顺序执行 python manage.py makemigrationspython manage.py migrate。但是由于某种原因,我不小心在 PgAdmin 中删除了 table(relation)(我知道这听起来很傻)。所以我尝试删除迁移文件夹中的所有文件,但 init.py 文件。然后我再次运行上面的两个命令,但是在PgAdmin中看不到table。
除了在 PgAdmin 中创建一个 table 自己,我还应该做什么?

提前致谢。

它不会工作,因为所有迁移的条目已经存储在名为 django_migrations 的 table 中。因此,即使您 运行 makemigrations 删除所有迁移文件后,也不会创建新文件。所以这里有三种方法可以修复它。

一:删除数据库(如果数据不重要)

删除数据库并创建一个新数据库。 运行 makemigrationsmigrate 命令。

二:手动创建table

如果你已经删除了所有的迁移文件,你最好恢复它们。您可以为此使用 git:git checkout /path/to/migration/folder。然后你可以手动创建table.

三:从django_migrations

中删除条目

我假设你已经删除了所有的迁移文件。所以这部分涵盖了整个项目。但是@DenizKaplan 解释了更好的方法。

如果您没有使用git,或者没有办法恢复这些文件,那么您可以按照以下步骤操作:

  1. 备份你的数据库
  2. 删除 djang_migrations table
  3. 中的所有条目
  4. 运行 ./manage.py makemigrations 生成迁移文件
  5. 运行 ./manage.py migrate <your lost app> 迁移您的应用程序(您在数据库中丢失了)。
  6. 运行 ./manage.py migrate --fake 伪造其余应用程序。

您需要检查一些步骤。如果在 makemigrations 操作后输出为空,您可能需要检查 django_migrations table 以删除与您正在使用的应用程序相关的行。如果一开始这没有帮助,您需要检查 INSTALLED_APPS,也许您可​​能不小心删除了应用程序。如果所有这些都不起作用,请提供有关错误的一些详细信息。