Rails4.2升级至5.0执行db:schema:load出现undefined method `oid'报错如何解决
Rails 4.2升级5.0+PostgreSQL 13执行schema:load报错的修复方法
该错误是版本兼容问题导致:Rails 4.2生成的schema.rb沿用了旧版PostgreSQL适配器的oid方法调用逻辑,而Rails 5.0重构了ActiveRecord::ConnectionAdapters::PostgreSQL::ColumnDefinition类,移除了oid相关接口,再配合PostgreSQL 10+的类型元数据读取规则变更,就触发了上述NoMethodError。
修复步骤
- 第一步:备份后删除旧版生成的
schema.rb文件mv db/schema.rb db/schema.rb.42.bak - 第二步:使用升级后的Rails 5.0环境重新生成适配的schema文件:
若所有迁移文件齐全,直接执行迁移即可自动生成新schema:
若不需要重新执行迁移,可直接从当前可用的开发数据库导出结构:bundle exec rails db:migratebundle exec rails db:schema:dump - 第三步:验证修复效果,重新执行schema加载命令:
此时即可正常完成数据库结构初始化。bundle exec rails db:schema:load
可选临时方案
如果暂时不想重新生成schema.rb,可以切换使用SQL格式的结构导出:
- 在
config/application.rb中添加配置:config.active_record.schema_format = :sql - 改用structure加载命令初始化数据库:
bundle exec rails db:structure:load
注意事项
建议同步升级pg gem到1.2.3及以上版本,避免其他PostgreSQL 13与Rails 5.0的适配器兼容问题,执行以下命令升级:
bundle update pg
内容的提问来源于stack exchange,提问作者Erem
相关产品推荐
相关产品推荐

