Mysql2 ::错误:表已经存在

时间:2016-03-09 07:23:25

标签: mysql ruby-on-rails

我有一些需要运行的迁移。但是当我rake db:migrate发生以下错误时。

Mysql2::Error: Table already exists

由于表已经存在,但这种情况发生了4-5次,但schema_migrations表似乎与应用程序不同步。

我的数据库中有一个生产转储,我不想丢弃表并丢失数据。我目前正在做的是修改schema_migrations表并手动添加这些冲突的迁移号,然后再次运行rake db:migrate,直到错误消失,然后我的新迁移开始运行。但这似乎不对。

除了我提到的不涉及丢弃数据库或丢失数据之外,是否有任何可行的解决方案?

2 个答案:

答案 0 :(得分:1)

对于此类迁移,您可以使用

在迁移中创建表之前检查table_exists
class Migrationclassname < ActiveRecord::Migration
  def up
    if table_exists?(:table_name)
      # Some changed if required
    else
      # create table 
    end
  end

  def down   
  end
end

答案 1 :(得分:0)

  

这种情况发生了4-5次,因为表已经存在,但schema_migrations表似乎与应用程序不同步。

您可以运行rake db:schema:dump以您的架构文件所说的形式拥有您的数据库。如果提到的表没有显示在模式文件中,那么您肯定可以通过运行rake db:migrate来创建它们。