You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Windows迁移至Linux(Postgres环境)后makemigrations执行失败

解决Django从Windows迁移到RHEL6.8后makemigrations失败的问题

这种情况我迁移项目时也碰到过,结合你全新数据库无需保留旧数据的场景,给你几个针对性的排查和解决步骤:

1. 先确认数据库连接配置是否正确

首先要保证Django能正常连接到RHEL上的Postgres数据库:

  • 打开项目的settings.py,检查DATABASES配置块,确保NAME(数据库名)、USER(数据库用户)、PASSWORD、HOST(本地连接可设为localhost或留空)都和你在RHEL上创建的数据库信息完全匹配。
  • 用Postgres命令行测试连接:执行psql -U <你的数据库用户名> <数据库名>,如果能正常进入数据库,说明连接参数没问题;同时要确保这个用户有创建表的权限,可执行GRANT ALL PRIVILEGES ON DATABASE <数据库名> TO <用户名>;赋予权限。

2. 清理旧迁移记录(关键步骤)

从Windows带过来的旧迁移文件,和全新数据库的状态完全不匹配,这大概率是报错的核心原因:

  • 进入每个app的migrations文件夹,删除除了__init__.py之外的所有.py文件(别删__init__.py,否则Django会识别不到这个app的迁移模块)。
  • 登录Postgres数据库,执行DROP TABLE IF EXISTS django_migrations;,删除可能残留的迁移历史表(新库本来是空的,放心执行)。

3. 重新生成并执行迁移

完成清理后,重新初始化迁移流程:

  • 执行python manage.py makemigrations,这会根据当前项目的models生成全新的初始迁移文件。
  • 接着执行python manage.py migrate,这会在新数据库中创建所有需要的表,包括Django自带的系统表(比如auth_user、django_migrations等)。

4. 排查是否有提前访问数据库的代码

有些自定义代码会在迁移完成前尝试访问数据库表,导致触发"表不存在"的错误:

  • 检查apps.py中的ready()方法,有没有在项目启动时就执行查询数据库的逻辑,如果有,暂时注释掉,等迁移完成后再恢复。
  • 检查是否使用了post_migrate或其他信号量,这些信号可能在迁移过程中触发并尝试访问未创建的表,同样可以先注释,迁移后再启用。

5. 确认Python和Django版本一致性

要保证RHEL上的Python和Django版本与Windows环境一致:

  • 执行python --version和pip show django查看当前版本,如果版本差异较大,可能会导致迁移语法或兼容性问题,建议安装和Windows环境完全相同的版本。

内容的提问来源于stack exchange,提问作者user8615607

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:02:53