Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails/MySql迁移整合_Ruby On Rails_Rails Migrations - Fatal编程技术网

Ruby on rails Rails/MySql迁移整合

Ruby on rails Rails/MySql迁移整合,ruby-on-rails,rails-migrations,Ruby On Rails,Rails Migrations,我有一个运行在MySql数据库上的Rails应用程序 有没有整合迁移的方法? 例如: 假设我有一个非常大的表,名为members,我创建了一个迁移,将列name添加到该表中,然后创建另一个迁移,添加另一个字段address,并将索引添加到address字段中 现在运行迁移时,它将更改表3次:添加名称、添加地址和添加索引。在每一次中,ALTERTABLE命令实际上都会创建一个新表,将所有数据复制到其中,然后删除旧表 在我的例子中,members表非常大,超过10万条记录,因此每次更改都需要几个小时

我有一个运行在MySql数据库上的Rails应用程序

有没有整合迁移的方法? 例如:

假设我有一个非常大的表,名为
members
,我创建了一个迁移,将列
name
添加到该表中,然后创建另一个迁移,添加另一个字段
address
,并将索引添加到
address
字段中

现在运行迁移时,它将更改表3次:添加
名称
、添加
地址
和添加索引。在每一次中,ALTERTABLE命令实际上都会创建一个新表,将所有数据复制到其中,然后删除旧表

在我的例子中,
members
表非常大,超过10万条记录,因此每次更改都需要几个小时


有没有办法将更改合并到一个alter中?

您的问题有点难以理解,因为您不局限于每次迁移一次操作

您可以轻松地执行以下操作:

class AddNameAddressAndIndexToMembers < ActiveRecord::Migration
  def up
    change_table :members do |t|
      t.string :name
      t.text :address
      t.index :name
    end
  end

  def down
    change_table :members do |t|
      t.remove_index :name
      t.remove :name, :address
    end
  end
end
class AddNameAddressAndIndexToMembers
只要反转迁移,删除以前的迁移文件,运行此迁移,一切都会好起来


现在,如果您的意思是这些都是旧的迁移,那么这可能很棘手,因为您不想逆转成吨的迁移。但是你想要实现什么呢?如果您只需要部署,请使用current with

您的问题有点难以理解,因为您不局限于每次迁移一次操作

您可以轻松地执行以下操作:

class AddNameAddressAndIndexToMembers < ActiveRecord::Migration
  def up
    change_table :members do |t|
      t.string :name
      t.text :address
      t.index :name
    end
  end

  def down
    change_table :members do |t|
      t.remove_index :name
      t.remove :name, :address
    end
  end
end
class AddNameAddressAndIndexToMembers
只要反转迁移,删除以前的迁移文件,运行此迁移,一切都会好起来


现在,如果您的意思是这些都是旧的迁移,那么这可能很棘手,因为您不想逆转成吨的迁移。但是你想要实现什么呢?如果只需要部署,使用当前的

如果您真的想要最大化速度,您可能应该考虑在执行调用中部署SQL,在该调用中,您可以创建一个临时的结果集,它具有所需的结构、空、滴和/或更改现有表,并从临时结果集中重新填充该表:

class SQLRevisions < ActiveRecord::Migration
    def change
        execute "
            [SQL PROCESS CALL]
            [SQL PROCESS CALL]
            [ETC.]"
        end
    end
classsqlrevisions

本地测试你的迁移结果,然后在你的生产实例上运行它。

如果你真的想要最大化速度,你可能应该考虑在执行调用中部署SQL,在这个调用中你可以创建一个临时的结果集,具有你想要的结构,空,滴,和/或改变现有的表,并从临时结果集中重新填充该表:

class SQLRevisions < ActiveRecord::Migration
    def change
        execute "
            [SQL PROCESS CALL]
            [SQL PROCESS CALL]
            [ETC.]"
        end
    end
classsqlrevisions
在本地测试迁移以获得预期结果,然后在生产实例上运行迁移