【发布时间】:2015-11-30 12:02:32
【问题描述】:
我混合了rake db:migrate 和pg_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