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

如何删除Heroku端旧migrations解决Django部署relation不存在报错

问题原因

本地删除所有迁移文件后重新生成的新迁移序列,和Heroku数据库中django_migrations表留存的旧版本迁移记录、实际表结构完全不匹配,Django执行迁移校验时无法找到对应模型表,就会抛出relation "accounts_goal" does not exist错误。

操作方案

根据你是否需要保留Heroku端的现有数据,二选一操作即可,操作前无论选哪种方案都先执行数据库备份,避免误操作丢数据:
heroku pg:backups:capture -a 替换为你的Heroku应用名称

方案1:Heroku端无需要保留的测试/生产数据(操作最简单,适配你当前本地已重置迁移的状态)

  • 执行命令重置Heroku数据库,清空所有旧表结构、旧迁移记录:heroku pg:reset DATABASE_URL -a 替换为你的Heroku应用名称,执行后按终端提示输入应用名确认操作
  • 推送本地最新代码到Heroku后,执行全新迁移生成匹配本地模型的表结构:heroku run python manage.py migrate -a 替换为你的Heroku应用名称
  • 按需创建超级管理员账号:heroku run python manage.py createsuperuser -a 替换为你的Heroku应用名称

方案2:需要保留Heroku端现有业务数据

  • 进入Heroku数据库命令行:heroku pg:psql -a 替换为你的Heroku应用名称
  • 执行SQL语句清空Django存储的迁移历史(该操作仅删除迁移记录,不会改动业务表和业务数据):TRUNCATE TABLE django_migrations;,执行完成后输入\q退出数据库命令行
  • 执行fake迁移,将你本地现有的所有迁移文件标记为已应用,避免Django重复执行建表逻辑报错:heroku run python manage.py migrate --fake -a 替换为你的Heroku应用名称
  • 校验迁移状态:执行heroku run python manage.py showmigrations -a 替换为你的Heroku应用名称,确认所有迁移项前都标记[X]后,重启Heroku服务即可:heroku restart -a 替换为你的Heroku应用名称

注意:后续本地开发不要直接全量删除migrations文件,若需要调整迁移历史,必须保证本地、服务端的迁移文件序列、迁移记录完全对齐,否则会反复出现同类迁移冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:33:19