Module: PgHero::Methods::Sequences

Included in:
Database
Defined in:
lib/pghero/methods/sequences.rb

Instance Method Summary collapse

Instance Method Details

#sequence_danger(options = {}) ⇒ Object



31
32
33
34
# File 'lib/pghero/methods/sequences.rb', line 31

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

#sequencesObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/pghero/methods/sequences.rb', line 4

def sequences
  sequences = select_all "    SELECT\n      sequence_schema AS schema,\n      table_name AS table,\n      column_name AS column,\n      c.data_type AS column_type,\n      CASE WHEN c.data_type = 'integer' THEN 2147483647::bigint ELSE maximum_value::bigint END AS max_value,\n      sequence_name AS sequence\n    FROM\n      information_schema.columns c\n    INNER JOIN\n      information_schema.sequences iss ON iss.sequence_name = regexp_replace(c.column_default, '^nextval\\\\(''(.*)''\\\\:\\\\:regclass\\\\)$', '\\\\1')\n    WHERE\n      column_default LIKE 'nextval%'\n      AND table_catalog = current_database()\n    ORDER BY\n      sequence_name ASC\n  SQL\n\n  select_all(sequences.map { |s| \"SELECT last_value FROM \#{s[\"sequence\"]}\" }.join(\" UNION ALL \")).each_with_index do |row, i|\n    sequences[i][\"last_value\"] = row[\"last_value\"]\n  end\n\n  sequences\nend\n"