Django迁移Heroku出现django.db.utils.DataError varchar长度超限如何解决
报错原因与修复步骤
该报错的核心原因是 历史迁移文件中仍然存在将对应字段varchar长度设置为100000000的记录,Django的migrate命令会按顺序执行所有迁移文件,旧的超限配置会在你后续的长度修正迁移执行前就触发错误,和当前模型文件的配置没有关联。
具体修复步骤
- 首先检查对应App下
migrations/目录内的所有历史迁移文件,定位到最早将目标字段max_length设为100000000的迁移文件。 - 根据你的项目场景选择对应处理方案:
- 如果你还未在任何生产/正式环境执行过这批次的迁移,可以直接删除从该超限配置迁移开始到最新的所有迁移文件,重新执行
python manage.py makemigrations生成全新的迁移文件,新生成的迁移会直接将目标字段长度设为1000,没有中间超限步骤,即可避免报错。 - 如果你已经在其他环境执行过旧迁移、不能删除迁移历史,可以直接修改那份有超限配置的旧迁移文件,把对应字段的
max_length参数从100000000改为1000,只要迁移的依赖关系没有变动,执行时就会按修改后的正确长度运行,不会触发超限错误。
- 如果你还未在任何生产/正式环境执行过这批次的迁移,可以直接删除从该超限配置迁移开始到最新的所有迁移文件,重新执行
- 如果Heroku环境已经有过迁移执行记录,可以先运行
heroku run python manage.py showmigrations查看迁移执行状态,定位到卡住的迁移节点后,也可通过heroku run python manage.py migrate --fake [你的App名] [对应迁移版本号]跳过已经实际生效的错误迁移步骤,再执行后续的正确迁移。
注意:Heroku提供的PostgreSQL服务对varchar类型的硬限制为10485760字节,任何超过该阈值的varchar长度定义都会直接抛出该错误,不要在模型字段中设置超出该限制的
max_length值。
内容的提问来源于stack exchange,提问作者Si Thu Htun
相关产品推荐
相关产品推荐

