Rails迁移,如何以批处理模式向表中添加多个列

问题描述 投票:0回答:2

当我想向现有表添加多个列时,我可以这样做:

rails g migration AddColumnsToUser col1:integer col2:integer .. etc.

这将生成具有多行的迁移:

def change
  add_column :users, :col1, :integer
  add_column :users, :col2, :integer
end

这将被转换为几个alter table命令到后端DB:

ALTER TABLE users ADD COLUMN col1 SMALLINT(6) NOT NULL;
ALTER TABLE users ADD COLUMN col2 SMALLINT(6) NOT NULL;

问题是如果你正在处理一个大表,那么这些alter table中的每一个都会花费很多时间,而不是MySQL,因为后端引擎会生成表的重复并且会执行许多昂贵的进程。所有这些工作都必须为我想添加的每一列完成。

所以,我的问题是,我怎么能只汇总所有这些add_column句子,所以结果将是批量模式的alter table,如下所示:

ALTER TABLE users
    ADD COLUMN col1 SMALLINT(6) NOT NULL,
    ADD COLUMN col2 SMALLINT(6) NOT NULL;
ruby-on-rails optimization migration alter-table
2个回答
3
投票

0
投票

如果你想要多个语句或自定义sql这样:

execute <<-SQL
   ALTER TABLE users
    ADD COLUMN col1 SMALLINT(6) NOT NULL,
    ADD COLUMN col2 SMALLINT(6) NOT NULL;
SQL
© www.soinside.com 2019 - 2024. All rights reserved.