una tipos tabla sintaxis manejo indice indexar index ejemplos create crear consultar sql ruby-on-rails database activerecord

tipos - sintaxis indices sql



ActiveRecord que encuentra índices de tabla existentes (2)

Esto funciona con MySQL, SQLite3 y Postgres:

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

Pero creo que solo te da los índices que creaste específicamente.

Además, para saber qué adaptador está en uso:

ActiveRecord::Base.connection.class

Estoy escribiendo un generador de migración para un complemento que estoy escribiendo y necesito poder encontrar qué índices únicos tiene una tabla para poder modificar los índices únicos existentes para convertirme en un índice único compuesto. He estado intentando encontrar una forma de acceder a los índices que tiene una tabla con ActiveRecord. Solo he podido encontrar el método ActiveRecord :: ConnectionAdapters :: PostgreSQLAdapter :: indexes, pero desafortunadamente esto solo está disponible para el PosgreSQLAdapter. Necesito poder apoyar las otras bases de datos importantes.

Primero grepping el archivo schema.rb para encontrar los índices, esto funcionó al principio, pero pronto me di cuenta de que esta era una mala estrategia.

Estaba pensando que si ActiveRecord no proporciona un medio para poder hacer esto para múltiples adaptadores de bases de datos, es posible que pueda escribir consultas específicas del adaptador para recuperar la información del índice de una tabla. Si necesito recurrir a este método, ¿cuál sería una buena forma de determinar el adaptador en uso?

Si alguien sabe de una manera de obtener ActiveRecord para listar la información del índice de la tabla que sería ideal.


Solo una actualización para una inspección más limpia. Como tenía muchas mesas, me resultaba difícil buscar productos específicos.

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

Esto será de configuración rápida.