Rails 迁移:重命名表上的索引

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 个字符”,请先手动将索引重命名为短名称。 迁移不够聪明,无法处理“名称太长”的问题。为了确定,我仍然总是使用重命名索引。

以上是关于Rails 迁移:重命名表上的索引的主要内容,如果未能解决你的问题,请参考以下文章

如何编写迁移以重命名 Rails 中的 ActiveRecord 模型及其表?

如何使用 Pandas 重命名重置索引上的多个列

核心数据轻量级迁移属性重命名

在 Laravel 迁移中重命名列,强制小写

如何通过 Rails 迁移克隆数据库表?

实体框架迁移重命名表和列