Получить все имена таблиц и количество строк для конкретной таблицы с помощью Rails? - PullRequest
2 голосов
/ 01 апреля 2011

Как я могу получить все имя таблицы и количество строк для конкретной таблицы из конкретной базы данных?

Результат

Table Name , Row Count , Table Size(MB)
---------------------------------------

table_1    , 10        , 2.45

table_2    , 20        , 4.00

Ответы [ 3 ]

2 голосов
/ 01 апреля 2011
ActiveRecord::Base.connection.tables.each do |table|    
 h = ActiveRecord::Base.connection.execute("SHOW TABLE STATUS LIKE '#{table}'").fetch_hash
 puts "#{h['Name']} has #{h['Rows']} rows with size: #{h['Data_length']}"
end
1 голос
/ 18 июня 2018

Вопрос помечен как mysql, но вы можете сделать это независимо от БД через ORM.

class DatabaseReport
  def entry_counts
    table_model_names.map do |model_name|
      entity = model_name.constantize rescue nil
      next if entity.nil?
      { entity.to_s => entity.all.count }
    end.compact
  end

  private

  def table_model_names
    ActiveRecord::Base.connection.tables.map(&:singularize).map(&:camelize)
  end
end

Обратите внимание, что при этом будут пропущены таблицы, для которых у вас нет сопоставления объектов, например метатаблицы типа ar_internal_metadata или schema_migrations. Он также не может вывести модели с областью действия (но может быть расширен для этого). Например. с Delayed::Job я делаю это:

  def table_model_names
    ActiveRecord::Base.connection.tables.map(&:singularize).map(&:camelize) + ["Delayed::Job"]
  end
0 голосов
/ 07 апреля 2011
    @temp_table = []
    ActiveRecord::Base.connection.tables.each do |table|
      count = ActiveRecord::Base.connection.execute("SELECT COUNT(*) as count FROM #{table}").fetch_hash['count']
      size = ActiveRecord::Base.connection.execute("SHOW TABLE STATUS LIKE '#{table}'").fetch_hash
      @temp_table <<  {:table_name => table,
          :records => count.to_i,
          :size_of_table => ((BigDecimal(size['Data_length']) + BigDecimal(size['Index_length']))/1024/1024).round(2)
        }
      end
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...