Sha256: 7dc150e07c94821f641d7239546f6383eadcd67356dc7cdbe3c4fad84f393f2e

Contents?: true

Size: 1.29 KB

Versions: 17

Compression:

Stored size: 1.29 KB

Contents

module PgHero
  module Methods
    module Sequences
      def sequences
        sequences = select_all <<-SQL
          SELECT
            sequence_schema AS schema,
            table_name AS table,
            column_name AS column,
            c.data_type AS column_type,
            CASE WHEN c.data_type = 'integer' THEN 2147483647::bigint ELSE maximum_value::bigint END AS max_value,
            sequence_name AS sequence
          FROM
            information_schema.columns c
          INNER JOIN
            information_schema.sequences iss ON iss.sequence_name = regexp_replace(c.column_default, '^nextval\\(''(.*)''\\:\\:regclass\\)$', '\\1')
          WHERE
            column_default LIKE 'nextval%'
            AND table_catalog = current_database()
          ORDER BY
            sequence_name ASC
        SQL

        select_all(sequences.map { |s| "SELECT last_value FROM #{s["sequence"]}" }.join(" UNION ALL ")).each_with_index do |row, i|
          sequences[i]["last_value"] = row["last_value"]
        end

        sequences
      end

      def sequence_danger(options = {})
        threshold = (options[:threshold] || 0.9).to_f
        sequences.select { |s| s["last_value"].to_i / s["max_value"].to_f > threshold }.sort_by { |s| s["max_value"].to_i - s["last_value"].to_i }
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
pghero-1.7.0 lib/pghero/methods/sequences.rb
pghero-1.6.5 lib/pghero/methods/sequences.rb
pghero-1.6.4 lib/pghero/methods/sequences.rb
pghero-1.6.3 lib/pghero/methods/sequences.rb
pghero-1.6.2 lib/pghero/methods/sequences.rb
pghero-1.6.1 lib/pghero/methods/sequences.rb
pghero-1.6.0 lib/pghero/methods/sequences.rb
pghero-1.5.3 lib/pghero/methods/sequences.rb
pghero-1.5.2 lib/pghero/methods/sequences.rb
pghero-1.5.1 lib/pghero/methods/sequences.rb
pghero-1.5.0 lib/pghero/methods/sequences.rb
pghero-1.4.2 lib/pghero/methods/sequences.rb
pghero-1.4.1 lib/pghero/methods/sequences.rb
pghero-1.4.0 lib/pghero/methods/sequences.rb
pghero-1.3.2 lib/pghero/methods/sequences.rb
pghero-1.3.1 lib/pghero/methods/sequences.rb
pghero-1.3.0 lib/pghero/methods/sequences.rb