我有一个表,其中的复合索引不是通过rails迁移创建的。现在,我需要创建一个rails迁移,删除这个索引并创建一个新索引,但我不一定知道索引的名称是什么。
我知道可以在迁移步骤中获取表名和列名列表。是否可以获取特定表上的索引名称列表?或者,从另一个角度来看,是否可以删除表上的所有索引?或者是编写我自己的特定于数据库的SQL查询以获取此信息的唯一选项?
答案 0 :(得分:9)
您可以通过以下方式获取表格中所有索引的详细信息:
ActiveRecord::Base.connection.indexes('tablename')
这将返回一个ActiveRecord::ConnectionAdapters::IndexDefinition
个对象数组,每个对象都有#name
和#columns
方法。
答案 1 :(得分:3)
要扩展@ showaltb的最佳答案,这里是一个完整的迁移,用于删除表中的所有索引,而不知道它们的名称:
ActiveRecord::Base.connection.indexes('tablename').each do |index|
remove_index 'tablename', name: index.name
end
答案 2 :(得分:1)
您可以直接从数据库获取信息。如果您使用的是MySQL:
>> select TABLE_NAME, INDEX_NAME from information_schema.statistics WHERE TABLE_SCHEMA = 'your_database_name';
您只需要替换 your_database_name 位。您需要information_schema数据库的特权(或以root用户身份登录)。