当前位置: 首页 > 面试题库 >

ActiveRecord查找现有表索引

狄富
2023-03-14
问题内容

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

我首先对schema.rb文件进行grep查找以找到索引,但起初它是可行的,但是我很快意识到这是一个错误的策略。

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

如果有人知道一种使ActiveRecord列出表索引信息的方法,那将是理想的选择。


问题答案:

这适用于MySQL,SQLite3和Postgres:

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

但是我认为它只能为您专门创建的索引。

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

ActiveRecord::Base.connection.class


 类似资料:
  • 本文向大家介绍Yii2 ActiveRecord多表关联及多表关联搜索的实现,包括了Yii2 ActiveRecord多表关联及多表关联搜索的实现的使用技巧和注意事项,需要的朋友参考一下 Yii的ActiveRecord是与数据库打交道的类,也即MVC中的M(模型层),也是ORM的O(Object)。 一个老生常谈的问题。最近通过群里的反馈,觉得很多人还是没有去理解这个问题。今天把这个问题讲明白了

  • 问题内容: 我正在解析的字符串中可能包含任意数量的带引号的字符串(我在解析代码,并尝试避免使用PLY)。我想找出是否有子字符串被引用,并且我有子字符串索引。我最初的想法是使用re查找所有匹配项,然后找出它们代表的索引范围。 似乎我应该将re与类似的正则表达式一起使用(目前,我避免使用三引号和此类字符串)。当我使用findall()时,会得到一个匹配字符串的列表,虽然有些不错,但我需要索引。 我的子

  • 如何根据对象数组的条件获取所有索引?我已经尝试了下面的代码,但是它只返回第一次出现的代码。

  • 我知道总是打印第一次出现的索引。我如何打印所有的索引?

  • 索引查找 索引查找的定义,来源百度百科 索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找。 索引查找的过程是: 首先根据给定的索引值K1,在索引表上查找出索引值等于K1的索引项,以确定K1对应的子表在主表中的开始位置和长度, 然后再根据给定的关键字K2,在对应的子表中查找出关键字等于K2的元素(结点)。 思路说明 对于一个list或者dictionary类型的数据,python有专门

  • 问题内容: 我有一个大约有450万行的Postgres表。列基本上只是 当查询该表,你有一个长整型,并希望找到对应的范围内的数据,并包括该值。索引此表以进行快速查找的最佳方法是什么? 问题答案: 一个 多列索引 具有反向排序顺序: 这样,可以将索引向前扫描到足够高的位置,然后对所有行进行扫描直到太低为止- 一次扫描。这就是为什么要对索引执行排序顺序的主要原因:将不同的排序顺序组合在具有不同顺序的多