Sha256: 481cd45f1772fad1f49258c9e22af1734f41ca71f185d06f5497b81b1a4a404e

Contents?: true

Size: 1.59 KB

Versions: 16

Compression:

Stored size: 1.59 KB

Contents

module RubyPgExtras
  class IndexInfo
    def self.call(table_name = nil)
      new.call(table_name)
    end

    def call(table_name = nil)
      indexes_data.select do |index_data|
        if table_name == nil
          true
        else
          index_data.fetch("tablename") == table_name
        end
      end.sort_by do |index_data|
        index_data.fetch("tablename")
      end.map do |index_data|
        index_name = index_data.fetch("indexname")

        {
          index_name: index_name,
          table_name: index_data.fetch("tablename"),
          columns: index_data.fetch("columns").split(",").map(&:strip),
          index_size: index_size_data.find do |el|
            el.fetch("name") == index_name
          end.fetch("size", "N/A"),
          index_scans: index_scans_data.find do |el|
            el.fetch("index") == index_name
          end.fetch("index_scans", "N/A"),
          null_frac: null_indexes_data.find do |el|
            el.fetch("index") == index_name
          end&.fetch("null_frac", "N/A")&.strip || "0.00%",
        }
      end
    end

    def index_size_data
      @_index_size_data ||= query_module.index_size(in_format: :hash)
    end

    def null_indexes_data
      @_null_indexes_data ||= query_module.null_indexes(
        in_format: :hash,
        args: { min_relation_size_mb: 0 },
      )
    end

    def index_scans_data
      @_index_scans_data ||= query_module.index_scans(in_format: :hash)
    end

    def indexes_data
      @_indexes_data ||= query_module.indexes(in_format: :hash)
    end

    private

    def query_module
      RubyPgExtras
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
ruby-pg-extras-5.6.7 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.6.6 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.6.5 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.6.4 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.6.3 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.6.2 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.6.1 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.6.0 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.5.1 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.5.0 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.4.5 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.4.4 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.4.3 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.4.2 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.4.1 lib/ruby_pg_extras/index_info.rb
ruby-pg-extras-5.4.0 lib/ruby_pg_extras/index_info.rb