【问题标题】:How can I fix my migrations? ActiveRecord::Migrator.current_version and db:migrate:status are wrong如何修复我的迁移? ActiveRecord::Migrator.current_version 和 db:migrate:status 错误
【发布时间】:2015-11-30 12:02:32
【问题描述】:

我混合了rake db:migratepg_restore(Postgres 从备份恢复)。

这使我的数据库与db:migrate:status 不同步。我的数据库中有列在ActiveRecord::Migrator.current_version 前面,所以当我尝试迁移时,我得到PG::DuplicateTable: ERROR: relation "foo_bar" already exists.

我该如何调和呢?

【问题讨论】:

  • 迁移所涵盖的数据库中是否存在所有表/更改?只是您的 schema_migrations 表中的版本不同步?您只需更新该表中的值以匹配最后一次有效的迁移,您应该已经准备就绪。
  • @Doon 遗憾的是没有。我的迁移版本在我最后一个迁移文件后面的数据库后面。我想我找到了我的数据库实际上所在的迁移文件,并在 schema.rb 中对其进行了更改,但仍然没有运气。我认为 rake 正在拉动 ActiveRecord::Migrator.current_version,而不是来自 schema.rb 的版本
  • 直接在数据库中修改即可。将最后一个运行到 schema_migrations 表中。或者您可以将所有时间戳(迁移文件名的第一部分直到第一个 _ )添加到该表中,直到并包括最后一个运行的时间戳。 Schema.rb 仅用于模式加载,迁移直接使用数据库
  • @Doon 这个的型号是什么?我看到它查询一个 schema_migrations 表,但没有 SchemaMigration 或 ActiveRecord::SchemaMigration 类。我应该在控制台中运行什么来更新它。目前,我的数据库落后 4 次迁移
  • 我会添加它作为答案。

标签: ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

您应该能够使用psql 客户端并从命令行执行此操作。一个简单的方法是使用./bin/rails dbconsole

那么您可以直接使用 sql 插入值。

insert into schema_migrations(version) values ('20150508142945');
insert into schema_migrations(version) values ('20150508172938');

更改值以匹配您的环境。

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 2018-04-09
    • 2021-09-23
    • 2019-09-03
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多