【问题标题】:Rails Migration: indexes on a renamed tableRails 迁移:重命名表上的索引
【发布时间】:2013-09-13 02:46:30
【问题描述】:

我创建了一个表并为其添加了索引。 在第二次迁移中,我重命名了该表。 索引会继续工作吗?

【问题讨论】:

    标签: ruby-on-rails indexing database-migration


    【解决方案1】:

    导轨 3

    不,您需要自己处理索引,因为索引是基于表名的。例如:

    remove_index :old_table_name, :column_name
    rename_table :old_table_name, :new_table_name
    add_index :new_table_name, :column_name
    

    Rails 4+

    来自the Rails 4 upgrade guide

    在 Rails 4.0 中,当重命名列或表时,相关索引也会重命名。如果您有重命名索引的迁移,则不再需要它们。

    【讨论】:

    • 在 Rails 4+ 中,如果新索引的名称太长,rename_table 会出错,所以在这种情况下,您的方法仍然有用。
    • 虽然 Rails 4+ 会自动重命名索引,但它会出错并且重命名失败。所以,这个答案很有用。
    • 同样在 Rails 4+ 中,您可以在 change 方法中使用 rename_index :table_name, "oldname", "newname"。如果您收到错误“表 'fertilisation_planning_plot_details' 上的索引名称 [...] 太长;限制为 63 个字符”,请先手动将索引重命名为短名称。
    • 迁移不够聪明,无法处理“名称太长”的问题。为了确定,我仍然总是使用重命名索引。
    猜你喜欢
    • 2018-10-03
    • 2018-07-24
    • 2018-06-13
    • 2013-12-14
    • 2015-03-01
    • 1970-01-01
    • 2016-12-02
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多