ActiveRecord查找现有表索引

我正在为我正在编写的插件编写一个迁移生成器,我需要能够找到表中的唯一索引,以便我可以修改现有的唯一索引以成为复合唯一索引。 我一直试图找到一种方法来访问表与ActiveRecord的索引。 我只能找到ActiveRecord :: ConnectionAdapters :: PostgreSQLAdapter :: indexes方法,但不幸的是,这只适用于PosgreSQLAdapter。 我需要能够支持其他主要数据库。

我首先使用schema.rb文件来查找索引,这首先起作用,但我很快意识到这是一个糟糕的策略。

我想如果ActiveRecord没有提供能够为多个数据库适配器执行此操作的方法,我可能能够编写特定于适配器的查询以从表中检索索引信息。 如果我需要求助于这种方法,那么确定正在使用的适配器的好方法是什么?

如果有人知道如何让ActiveRecord列出理想的表索引信息。

这适用于MySQL,SQLite3和Postgres:

 ActiveRecord::Base.connection.tables.each do |table| puts ActiveRecord::Base.connection.indexes(table).inspect end 

但我认为它只会为您提供专门创建的索引。

另外,要找出正在使用的适配器:

 ActiveRecord::Base.connection.class 

只是更新清洁检查。 由于我有很多桌子,我发现很难搜索特定的东西。

  ActiveRecord::Base.connection.tables.each do |table| indexes = ActiveRecord::Base.connection.indexes(table) if indexes.length > 0 puts "====> #{table} <====" indexes.each do |ind| puts "----> #{ind.name}" end puts "====> #{table} <====" 2.times{ puts ''} end end 

这将是快速设置。