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

PG::UndefinedTable错误求助:Heroku部署时stocks表不存在问题

搞定Heroku上的PG::UndefinedTable迁移错误

嘿,我遇过几乎一模一样的问题,这事儿根源出在Heroku数据库里的迁移记录没跟上你本地清理的节奏!让我一步步教你解决:

问题到底出在哪?

你本地已经删掉了20180515064500这个迁移文件,还重置了本地数据库,但Heroku的schema_migrations表里还留着这条记录。当你推代码上去执行迁移时,Heroku傻呵呵地要找这个不存在的迁移来跑,可这时候stocks表还没被创建(因为主分支之前漏了创建它的迁移),自然就炸出PG::UndefinedTable错误了。

两种解决办法,按需选

办法一:清理残留的迁移记录(不删数据,优先用这个)

  • 先备份!先备份!先备份! 重要的事说三遍:
    heroku pg:backups:capture
    
  • 进Heroku的数据库控制台看看:
    heroku run rails dbconsole
    
  • 查一查是不是真的有那条残留记录:
    SELECT version FROM schema_migrations WHERE version = '20180515064500';
    
    要是能查到这条,那就对了。
  • 把这条多余的记录删掉:
    DELETE FROM schema_migrations WHERE version = '20180515064500';
    
  • 退出控制台,重新跑迁移:
    heroku run rake db:migrate
    
    这时候Heroku会按你当前代码里的迁移文件来执行,先创建stocks表,再处理其他加字段的迁移,就不会报错了。

办法二:直接同步本地schema(迁移彻底乱了的时候用)

如果你的本地schema.rb已经是完全正确的(包含stocks表和所有需要的字段),那直接把本地schema同步到Heroku更省事:

  • 还是先备份:
    heroku pg:backups:capture
    
  • 重置Heroku数据库并加载本地schema:
    heroku run rake db:schema:load
    

    注意:这个操作会清空Heroku上的所有数据,重新建表,所以只适合测试环境,或者你已经把数据备份好的生产环境!

以后别再踩这个坑啦

  • 合并分支的时候一定要仔细检查迁移文件,别漏了像创建表这么重要的迁移。
  • 尽量别随便删迁移文件,真要清理迁移历史的话,本地跑rails db:migrate:reset后,把更新后的schema.rb提交上去,然后让团队所有人都用db:schema:load来同步数据库,别各自跑迁移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:43:44