【问题标题】:Situation of schema_migration after handy delete from it方便地从中删除后 schema_migration 的情况
【发布时间】:2012-01-10 19:12:28
【问题描述】:

30 分钟前,我访问了 MySQL 和我在 RoR 中使用它的数据库。然后我转到schema_migration 并输入

DELETE FROM schema_migration WHERE version=20120110152044;

完成这项工作后,我输入rake db:migrate,我希望我几分钟前删除的迁移将再次添加到schema_migration,但我遇到此消息:

“MySQL2::ERROR 表‘football_leagues’已经存在......”

谁能告诉我这条消息的原因?

【问题讨论】:

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


    【解决方案1】:

    您的 20120110152044 迁移可能会创建 football_leagues 表,其内容如下:

    create_table :football_leagues do |t|
        #...
    

    upchange 方法中。从schema_migrations 表中删除条目不会回滚迁移,它只会更改完成迁移的记录。您可能需要返回 MySQL 并手动删除 football_leagues 表:

    mysql> drop table football_leagues;
    

    如果您需要保留football_leagues,那么您将不得不更改您的迁移以不再尝试创建football_leagues

    您可以使用rake db:rollback 回滚迁移,而不是尝试手动编辑schema_migrations,只有在您确定自己确切知道自己在做什么的情况下才应该编辑schema_migrations

    【讨论】:

      【解决方案2】:

      我不想显得傲慢,但这是因为您正在尝试创建一个名为 football_leagues 的表,而它已经存在。运行rake db:drop db:migrate 删除表(以及数据库中的任何其他表)并重新运行迁移。 您将丢失该数据库中的所有数据。

      【讨论】:

      • 现在,如何将该迁移的版本放入 schema_migration?
      • 您是否真的建议 OP 删除整个数据库以修复单个表?你是疯了还是只是恶意?
      • @muistooshort 他显然通过直接玩弄他的数据库搞砸了他的迁移。我很清楚这会导致数据丢失。照我说的去做就会恢复原状。
      • 为了解决一个小问题而放弃整个数据库是没有意义的,而且弊大于利。
      猜你喜欢
      • 2015-04-12
      • 2019-06-23
      • 2018-12-20
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 2016-04-03
      相关资源
      最近更新 更多