rails-pg-extras 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rails-pg-extras.rb +12 -12
  3. data/lib/rails-pg-extras/queries/{all_locks.rb → all_locks.sql} +1 -11
  4. data/lib/rails-pg-extras/queries/{bloat.rb → bloat.sql} +2 -12
  5. data/lib/rails-pg-extras/queries/{blocking.rb → blocking.sql} +2 -12
  6. data/lib/rails-pg-extras/queries/{cache_hit.rb → cache_hit.sql} +1 -11
  7. data/lib/rails-pg-extras/queries/{calls.rb → calls.sql} +2 -12
  8. data/lib/rails-pg-extras/queries/extensions.sql +4 -0
  9. data/lib/rails-pg-extras/queries/{index_size.rb → index_size.sql} +1 -11
  10. data/lib/rails-pg-extras/queries/{index_usage.rb → index_usage.sql} +1 -11
  11. data/lib/rails-pg-extras/queries/{locks.rb → locks.sql} +1 -11
  12. data/lib/rails-pg-extras/queries/long_running_queries.rb +1 -11
  13. data/lib/rails-pg-extras/queries/{mandelbrot.rb → mandelbrot.sql} +2 -12
  14. data/lib/rails-pg-extras/queries/{outliers.rb → outliers.sql} +2 -12
  15. data/lib/rails-pg-extras/queries/records_rank.sql +9 -0
  16. data/lib/rails-pg-extras/queries/seq_scans.sql +7 -0
  17. data/lib/rails-pg-extras/queries/{table_indexes_size.rb → table_indexes_size.sql} +1 -11
  18. data/lib/rails-pg-extras/queries/{table_size.rb → table_size.sql} +1 -11
  19. data/lib/rails-pg-extras/queries/{total_index_size.rb → total_index_size.sql} +1 -11
  20. data/lib/rails-pg-extras/queries/{total_table_size.rb → total_table_size.sql} +1 -11
  21. data/lib/rails-pg-extras/queries/{unused_indexes.rb → unused_indexes.sql} +5 -15
  22. data/lib/rails-pg-extras/queries/{vacuum_stats.rb → vacuum_stats.sql} +2 -13
  23. data/lib/rails-pg-extras/version.rb +1 -1
  24. data/rails-pg-extras.gemspec +2 -2
  25. metadata +26 -25
  26. data/lib/rails-pg-extras/queries/extensions.rb +0 -13
  27. data/lib/rails-pg-extras/queries/records_rank.rb +0 -19
  28. data/lib/rails-pg-extras/queries/seq_scans.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9dfa15692ba53bb7e4e763859f519ac6ee4d1f6b40fe901dc4c0fa7bb245fa86
4
- data.tar.gz: 284287818c776080da8f61b67ffef1604ec48ea622358a1c4822417fe50229fd
3
+ metadata.gz: b6bc007ddc338613256c083afc688a962ee9e79d3430e8c725e141e26611c490
4
+ data.tar.gz: 2d27467222f23985d1ac6e463095f80de58d8bd76e7fa0089203fd5d61852f46
5
5
  SHA512:
6
- metadata.gz: 575d2bb592139fd3fcc91dc175fef56376a055b00a241e714b6ba13d8cdc287c84a2e887967bb947e20b7f6916e5756c297bcb0121522da00cc4cb72fe351aa4
7
- data.tar.gz: 2c135940884acd28d4ab91970f2ba0a55bc8797b591a908aec6de51e31fea831596125bb99146c349b27ae8b5f054bbf53c31850706d43536fcf7d92eda0cd3a
6
+ metadata.gz: 54a816ff465969fea4dc82ecac87ac4d98bac06b65ab138cfaa3570a23d2e099cd0dbc1ae7210d4a4fb63e44a9618c0961b41b2fcb4ccd45b61fc37cdd247baf
7
+ data.tar.gz: 34ec1ee2fd6e730983ed9be54be68b8c6603eafb93147453125567f277d327d292743f9a1cbfd95b429454c7321a54800123a5cf71cbc01a362b6c065deb1aa6
@@ -3,19 +3,17 @@
3
3
  require 'terminal-table'
4
4
 
5
5
  module RailsPGExtras
6
- QUERIES = %i(
6
+ QUERIES = %i(
7
7
  bloat blocking cache_hit
8
- calls extensions
9
- index_size index_usage locks all_locks
10
- long_running_queries mandelbrot outliers
11
- records_rank seq_scans table_indexes_size
12
- table_size total_index_size total_table_size
13
- unused_indexes vacuum_stats
8
+ calls extensions
9
+ index_size index_usage locks all_locks
10
+ long_running_queries mandelbrot outliers
11
+ records_rank seq_scans table_indexes_size
12
+ table_size total_index_size total_table_size
13
+ unused_indexes vacuum_stats
14
14
  )
15
15
 
16
16
  QUERIES.each do |query_name|
17
- require "rails-pg-extras/queries/#{query_name}"
18
-
19
17
  define_singleton_method query_name do |options = { in_format: :display_table }|
20
18
  run_query(
21
19
  query_name: query_name,
@@ -25,9 +23,11 @@ module RailsPGExtras
25
23
  end
26
24
 
27
25
  def self.run_query(query_name:, in_format:)
28
- result = connection.execute(self.public_send("#{query_name}_sql"))
29
- title = self.public_send("#{query_name}_description")
30
- display_result(result, title: title, in_format: in_format)
26
+ sql_path = File.join(File.dirname(__FILE__), "/rails-pg-extras/queries/#{query_name}.sql")
27
+ sql = File.read(sql_path)
28
+ description = sql.split("\n").first[/\/\*(.*?)\*\//m, 1].strip
29
+ result = connection.execute(sql)
30
+ display_result(result, title: description, in_format: in_format)
31
31
  end
32
32
 
33
33
  def self.display_result(result, title:, in_format:)
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Queries with active locks */
2
2
 
3
- module RailsPGExtras
4
- def self.all_locks_description
5
- "Queries with active locks"
6
- end
7
-
8
- def self.all_locks_sql
9
- <<-EOS
10
3
  SELECT
11
4
  pg_stat_activity.pid,
12
5
  pg_class.relname,
@@ -21,6 +14,3 @@ OUTER JOIN pg_class
21
14
  WHERE pg_stat_activity.query <> '<insufficient privilege>'
22
15
  AND pg_locks.pid = pg_stat_activity.pid
23
16
  AND pg_stat_activity.pid <> pg_backend_pid() order by query_start;
24
- EOS
25
- end
26
- end
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Table and index bloat in your database ordered by most wasteful */
2
2
 
3
- module RailsPGExtras
4
- def self.bloat_description
5
- "Table and index bloat in your database ordered by most wasteful"
6
- end
7
-
8
- def self.bloat_sql
9
- <<-EOS
10
3
  WITH constants AS (
11
4
  SELECT current_setting('block_size')::numeric AS bs, 23 AS hdr, 4 AS ma
12
5
  ), bloat_info AS (
@@ -66,8 +59,5 @@ SELECT
66
59
  CASE WHEN ipages < iotta THEN '0' ELSE (bs*(ipages-iotta))::bigint END AS raw_waste
67
60
  FROM
68
61
  index_bloat) bloat_summary
69
- ORDER BY raw_waste DESC, bloat DESC
70
- EOS
71
- end
72
- end
62
+ ORDER BY raw_waste DESC, bloat DESC;
73
63
 
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Queries holding locks other queries are waiting to be released */
2
2
 
3
- module RailsPGExtras
4
- def self.blocking_description
5
- "Queries holding locks other queries are waiting to be released"
6
- end
7
-
8
- def self.blocking_sql
9
- <<-EOS
10
3
  SELECT bl.pid AS blocked_pid,
11
4
  ka.query AS blocking_statement,
12
5
  now() - ka.query_start AS blocking_duration,
@@ -20,7 +13,4 @@ JOIN pg_catalog.pg_locks kl
20
13
  JOIN pg_catalog.pg_stat_activity ka
21
14
  ON kl.pid = ka.pid
22
15
  ON bl.transactionid = kl.transactionid AND bl.pid != kl.pid
23
- WHERE NOT bl.granted
24
- EOS
25
- end
26
- end
16
+ WHERE NOT bl.granted;
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Index and table hit rate */
2
2
 
3
- module RailsPGExtras
4
- def self.cache_hit_description
5
- "Index and table hit rate"
6
- end
7
-
8
- def self.cache_hit_sql
9
- <<-EOS
10
3
  SELECT
11
4
  'index hit rate' AS name,
12
5
  (sum(idx_blks_hit)) / nullif(sum(idx_blks_hit + idx_blks_read),0) AS ratio
@@ -16,6 +9,3 @@ SELECT
16
9
  'table hit rate' AS name,
17
10
  sum(heap_blks_hit) / nullif(sum(heap_blks_hit) + sum(heap_blks_read),0) AS ratio
18
11
  FROM pg_statio_user_tables;
19
- EOS
20
- end
21
- end
@@ -1,19 +1,9 @@
1
- # frozen_string_literal: true
1
+ /* 10 queries that have longest execution time in aggregate */
2
2
 
3
- module RailsPGExtras
4
- def self.calls_description
5
- "10 queries that have longest execution time in aggregate"
6
- end
7
-
8
- def self.calls_sql
9
- <<-EOS
10
3
  SELECT query AS qry,
11
4
  interval '1 millisecond' * total_time AS exec_time,
12
5
  to_char((total_time/sum(total_time) OVER()) * 100, 'FM90D0') || '%' AS prop_exec_time,
13
6
  to_char(calls, 'FM999G999G990') AS ncalls,
14
7
  interval '1 millisecond' * (blk_read_time + blk_write_time) AS sync_io_time
15
8
  FROM pg_stat_statements WHERE userid = (SELECT usesysid FROM pg_user WHERE usename = current_user LIMIT 1)
16
- ORDER BY calls DESC LIMIT 10
17
- EOS
18
- end
19
- end
9
+ ORDER BY calls DESC LIMIT 10;
@@ -0,0 +1,4 @@
1
+ /* Available and installed extensions */
2
+
3
+ SELECT * FROM pg_available_extensions ORDER BY installed_version;
4
+
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* The size of indexes, descending by size */
2
2
 
3
- module RailsPGExtras
4
- def self.index_size_description
5
- "The size of indexes, descending by size"
6
- end
7
-
8
- def self.index_size_sql
9
- <<-EOS
10
3
  SELECT c.relname AS name,
11
4
  pg_size_pretty(sum(c.relpages::bigint*8192)::bigint) AS size
12
5
  FROM pg_class c
@@ -16,6 +9,3 @@ AND n.nspname !~ '^pg_toast'
16
9
  AND c.relkind='i'
17
10
  GROUP BY c.relname
18
11
  ORDER BY sum(c.relpages) DESC;
19
- EOS
20
- end
21
- end
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Index hit rate (effective databases are at 99% and up) */
2
2
 
3
- module RailsPGExtras
4
- def self.index_usage_description
5
- "Index hit rate (effective databases are at 99% and up)"
6
- end
7
-
8
- def self.index_usage_sql
9
- <<-EOS
10
3
  SELECT relname,
11
4
  CASE idx_scan
12
5
  WHEN 0 THEN 'Insufficient data'
@@ -17,6 +10,3 @@ SELECT relname,
17
10
  pg_stat_user_tables
18
11
  ORDER BY
19
12
  n_live_tup DESC;
20
- EOS
21
- end
22
- end
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Queries with active exclusive locks */
2
2
 
3
- module RailsPGExtras
4
- def self.locks_description
5
- "Queries with active exclusive locks"
6
- end
7
-
8
- def self.locks_sql
9
- <<-EOS
10
3
  SELECT
11
4
  pg_stat_activity.pid,
12
5
  pg_class.relname,
@@ -21,6 +14,3 @@ WHERE pg_stat_activity.query <> '<insufficient privilege>'
21
14
  AND pg_locks.pid = pg_stat_activity.pid
22
15
  AND pg_locks.mode = 'ExclusiveLock'
23
16
  AND pg_stat_activity.pid <> pg_backend_pid() order by query_start;
24
- EOS
25
- end
26
- end
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* All queries longer than five minutes by descending duration */
2
2
 
3
- module RailsPGExtras
4
- def self.long_running_queries_description
5
- "All queries longer than five minutes by descending duration"
6
- end
7
-
8
- def self.long_running_queries_sql
9
- <<-EOS
10
3
  SELECT
11
4
  pid,
12
5
  now() - pg_stat_activity.query_start AS duration,
@@ -19,6 +12,3 @@ WHERE
19
12
  AND now() - pg_stat_activity.query_start > interval '5 minutes'
20
13
  ORDER BY
21
14
  now() - pg_stat_activity.query_start DESC;
22
- EOS
23
- end
24
- end
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* The mandelbrot set */
2
2
 
3
- module RailsPGExtras
4
- def self.mandelbrot_description
5
- "The mandelbrot set"
6
- end
7
-
8
- def self.mandelbrot_sql
9
- <<-EOS
10
3
  WITH RECURSIVE Z(IX, IY, CX, CY, X, Y, I) AS (
11
4
  SELECT IX, IY, X::float, Y::float, X::float, Y::float, 0
12
5
  FROM (select -2.2 + 0.031 * i, i from generate_series(0,101) as i) as xgen(x,ix),
@@ -25,7 +18,4 @@ FROM (
25
18
  ORDER BY IY, IX
26
19
  ) AS ZT
27
20
  GROUP BY IY
28
- ORDER BY IY
29
- EOS
30
- end
31
- end
21
+ ORDER BY IY;
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* 10 queries that have longest execution time in aggregate */
2
2
 
3
- module RailsPGExtras
4
- def self.outliers_description
5
- "10 queries that have longest execution time in aggregate"
6
- end
7
-
8
- def self.outliers_sql
9
- <<-EOS
10
3
  SELECT interval '1 millisecond' * total_time AS total_exec_time,
11
4
  to_char((total_time/sum(total_time) OVER()) * 100, 'FM90D0') || '%' AS prop_exec_time,
12
5
  to_char(calls, 'FM999G999G999G990') AS ncalls,
@@ -14,7 +7,4 @@ interval '1 millisecond' * (blk_read_time + blk_write_time) AS sync_io_time,
14
7
  query AS query
15
8
  FROM pg_stat_statements WHERE userid = (SELECT usesysid FROM pg_user WHERE usename = current_user LIMIT 1)
16
9
  ORDER BY total_time DESC
17
- LIMIT 10
18
- EOS
19
- end
20
- end
10
+ LIMIT 10;
@@ -0,0 +1,9 @@
1
+ /* All tables and the number of rows in each ordered by number of rows descending */
2
+
3
+ SELECT
4
+ relname AS name,
5
+ n_live_tup AS estimated_count
6
+ FROM
7
+ pg_stat_user_tables
8
+ ORDER BY
9
+ n_live_tup DESC;
@@ -0,0 +1,7 @@
1
+ /* Count of sequential scans by table descending by order */
2
+
3
+ SELECT relname AS name,
4
+ seq_scan as count
5
+ FROM
6
+ pg_stat_user_tables
7
+ ORDER BY seq_scan DESC;
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Total size of all the indexes on each table, descending by size */
2
2
 
3
- module RailsPGExtras
4
- def self.table_indexes_size_description
5
- "Total size of all the indexes on each table, descending by size"
6
- end
7
-
8
- def self.table_indexes_size_sql
9
- <<-EOS
10
3
  SELECT c.relname AS table,
11
4
  pg_size_pretty(pg_indexes_size(c.oid)) AS index_size
12
5
  FROM pg_class c
@@ -15,6 +8,3 @@ WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
15
8
  AND n.nspname !~ '^pg_toast'
16
9
  AND c.relkind='r'
17
10
  ORDER BY pg_indexes_size(c.oid) DESC;
18
- EOS
19
- end
20
- end
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Size of the tables (excluding indexes), descending by size */
2
2
 
3
- module RailsPGExtras
4
- def self.table_size_description
5
- "Size of the tables (excluding indexes), descending by size"
6
- end
7
-
8
- def self.table_size_sql
9
- <<-EOS
10
3
  SELECT c.relname AS name,
11
4
  pg_size_pretty(pg_table_size(c.oid)) AS size
12
5
  FROM pg_class c
@@ -15,6 +8,3 @@ WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
15
8
  AND n.nspname !~ '^pg_toast'
16
9
  AND c.relkind='r'
17
10
  ORDER BY pg_table_size(c.oid) DESC;
18
- EOS
19
- end
20
- end
@@ -1,18 +1,8 @@
1
- # frozen_string_literal: true
1
+ /* Total size of all indexes in MB */
2
2
 
3
- module RailsPGExtras
4
- def self.total_index_size_description
5
- "Total size of all indexes in MB"
6
- end
7
-
8
- def self.total_index_size_sql
9
- <<-EOS
10
3
  SELECT pg_size_pretty(sum(c.relpages::bigint*8192)::bigint) AS size
11
4
  FROM pg_class c
12
5
  LEFT JOIN pg_namespace n ON (n.oid = c.relnamespace)
13
6
  WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
14
7
  AND n.nspname !~ '^pg_toast'
15
8
  AND c.relkind='i';
16
- EOS
17
- end
18
- end
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Size of the tables (including indexes), descending by size */
2
2
 
3
- module RailsPGExtras
4
- def self.total_table_size_description
5
- "Size of the tables (including indexes), descending by size"
6
- end
7
-
8
- def self.total_table_size_sql
9
- <<-EOS
10
3
  SELECT c.relname AS name,
11
4
  pg_size_pretty(pg_total_relation_size(c.oid)) AS size
12
5
  FROM pg_class c
@@ -15,6 +8,3 @@ WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
15
8
  AND n.nspname !~ '^pg_toast'
16
9
  AND c.relkind='r'
17
10
  ORDER BY pg_total_relation_size(c.oid) DESC;
18
- EOS
19
- end
20
- end
@@ -1,16 +1,9 @@
1
- # frozen_string_literal: true
1
+ /* Unused and almost unused indexes */
2
+ /* Ordered by their size relative to the number of index scans.
3
+ Exclude indexes of very small tables (less than 5 pages),
4
+ where the planner will almost invariably select a sequential scan,
5
+ but may not in the future as the table grows */
2
6
 
3
- module RailsPGExtras
4
- def self.unused_indexes_description
5
- "Unused and almost unused indexes"
6
- end
7
- # Ordered by their size relative to the number of index scans.
8
- # Exclude indexes of very small tables (less than 5 pages),
9
- # where the planner will almost invariably select a sequential scan,
10
- # but may not in the future as the table grows
11
-
12
- def self.unused_indexes_sql
13
- <<-EOS
14
7
  SELECT
15
8
  schemaname || '.' || relname AS table,
16
9
  indexrelname AS index,
@@ -21,6 +14,3 @@ JOIN pg_index i ON ui.indexrelid = i.indexrelid
21
14
  WHERE NOT indisunique AND idx_scan < 50 AND pg_relation_size(relid) > 5 * 8192
22
15
  ORDER BY pg_relation_size(i.indexrelid) / nullif(idx_scan, 0) DESC NULLS FIRST,
23
16
  pg_relation_size(i.indexrelid) DESC;
24
- EOS
25
- end
26
- end
@@ -1,12 +1,5 @@
1
- # frozen_string_literal: true
1
+ /* Dead rows and whether an automatic vacuum is expected to be triggered */
2
2
 
3
- module RailsPGExtras
4
- def self.vacuum_stats_description
5
- "Dead rows and whether an automatic vacuum is expected to be triggered"
6
- end
7
-
8
- def self.vacuum_stats_sql
9
- <<-EOS
10
3
  WITH table_opts AS (
11
4
  SELECT
12
5
  pg_class.oid, relname, nspname, array_to_string(reloptions, '') AS relopts
@@ -44,8 +37,4 @@ SELECT
44
37
  FROM
45
38
  pg_stat_user_tables psut INNER JOIN pg_class ON psut.relid = pg_class.oid
46
39
  INNER JOIN vacuum_settings ON pg_class.oid = vacuum_settings.oid
47
- ORDER BY 1
48
- EOS
49
- end
50
- end
51
-
40
+ ORDER BY 1;
@@ -1,3 +1,3 @@
1
1
  module RailsPGExtras
2
- VERSION = "0.4.1"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.version = RailsPGExtras::VERSION
9
9
  gem.authors = ["pawurb"]
10
10
  gem.email = ["contact@pawelurbanek.com"]
11
- gem.summary = %q{ Rails PostgreSQL database insights }
12
- gem.description = %q{ A bunch of rake tasks for showing what's going on inside your Rails PostgreSQL database }
11
+ gem.summary = %q{ Rails PostgreSQL performance database insights }
12
+ gem.description = %q{ Rails port of Heroku PG Extras. The goal of this project is to provide a powerful insights into PostgreSQL database for Ruby on Rails apps that are not using the default Heroku PostgreSQL plugin. }
13
13
  gem.homepage = "http://github.com/pawurb/rails-pg-extras"
14
14
  gem.files = `git ls-files`.split("\n")
15
15
  gem.require_paths = ["lib"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-pg-extras
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pawurb
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-28 00:00:00.000000000 Z
11
+ date: 2019-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -38,8 +38,9 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description: " A bunch of rake tasks for showing what's going on inside your Rails
42
- PostgreSQL database "
41
+ description: " Rails port of Heroku PG Extras. The goal of this project is to provide
42
+ a powerful insights into PostgreSQL database for Ruby on Rails apps that are not
43
+ using the default Heroku PostgreSQL plugin. "
43
44
  email:
44
45
  - contact@pawelurbanek.com
45
46
  executables: []
@@ -52,26 +53,26 @@ files:
52
53
  - README.md
53
54
  - Rakefile
54
55
  - lib/rails-pg-extras.rb
55
- - lib/rails-pg-extras/queries/all_locks.rb
56
- - lib/rails-pg-extras/queries/bloat.rb
57
- - lib/rails-pg-extras/queries/blocking.rb
58
- - lib/rails-pg-extras/queries/cache_hit.rb
59
- - lib/rails-pg-extras/queries/calls.rb
60
- - lib/rails-pg-extras/queries/extensions.rb
61
- - lib/rails-pg-extras/queries/index_size.rb
62
- - lib/rails-pg-extras/queries/index_usage.rb
63
- - lib/rails-pg-extras/queries/locks.rb
56
+ - lib/rails-pg-extras/queries/all_locks.sql
57
+ - lib/rails-pg-extras/queries/bloat.sql
58
+ - lib/rails-pg-extras/queries/blocking.sql
59
+ - lib/rails-pg-extras/queries/cache_hit.sql
60
+ - lib/rails-pg-extras/queries/calls.sql
61
+ - lib/rails-pg-extras/queries/extensions.sql
62
+ - lib/rails-pg-extras/queries/index_size.sql
63
+ - lib/rails-pg-extras/queries/index_usage.sql
64
+ - lib/rails-pg-extras/queries/locks.sql
64
65
  - lib/rails-pg-extras/queries/long_running_queries.rb
65
- - lib/rails-pg-extras/queries/mandelbrot.rb
66
- - lib/rails-pg-extras/queries/outliers.rb
67
- - lib/rails-pg-extras/queries/records_rank.rb
68
- - lib/rails-pg-extras/queries/seq_scans.rb
69
- - lib/rails-pg-extras/queries/table_indexes_size.rb
70
- - lib/rails-pg-extras/queries/table_size.rb
71
- - lib/rails-pg-extras/queries/total_index_size.rb
72
- - lib/rails-pg-extras/queries/total_table_size.rb
73
- - lib/rails-pg-extras/queries/unused_indexes.rb
74
- - lib/rails-pg-extras/queries/vacuum_stats.rb
66
+ - lib/rails-pg-extras/queries/mandelbrot.sql
67
+ - lib/rails-pg-extras/queries/outliers.sql
68
+ - lib/rails-pg-extras/queries/records_rank.sql
69
+ - lib/rails-pg-extras/queries/seq_scans.sql
70
+ - lib/rails-pg-extras/queries/table_indexes_size.sql
71
+ - lib/rails-pg-extras/queries/table_size.sql
72
+ - lib/rails-pg-extras/queries/total_index_size.sql
73
+ - lib/rails-pg-extras/queries/total_table_size.sql
74
+ - lib/rails-pg-extras/queries/unused_indexes.sql
75
+ - lib/rails-pg-extras/queries/vacuum_stats.sql
75
76
  - lib/rails-pg-extras/railtie.rb
76
77
  - lib/rails-pg-extras/tasks/all.rake
77
78
  - lib/rails-pg-extras/version.rb
@@ -95,8 +96,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
96
  - !ruby/object:Gem::Version
96
97
  version: '0'
97
98
  requirements: []
98
- rubygems_version: 3.0.6
99
+ rubygems_version: 3.0.3
99
100
  signing_key:
100
101
  specification_version: 4
101
- summary: Rails PostgreSQL database insights
102
+ summary: Rails PostgreSQL performance database insights
102
103
  test_files: []
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsPGExtras
4
- def self.extensions_description
5
- "Available and installed extensions"
6
- end
7
-
8
- def self.extensions_sql
9
- <<-EOS
10
- SELECT * FROM pg_available_extensions ORDER BY installed_version;
11
- EOS
12
- end
13
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsPGExtras
4
- def self.records_rank_description
5
- "All tables and the number of rows in each ordered by number of rows descending"
6
- end
7
-
8
- def self.records_rank_sql
9
- <<-EOS
10
- SELECT
11
- relname AS name,
12
- n_live_tup AS estimated_count
13
- FROM
14
- pg_stat_user_tables
15
- ORDER BY
16
- n_live_tup DESC;
17
- EOS
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsPGExtras
4
- def self.seq_scans_description
5
- "Count of sequential scans by table descending by order"
6
- end
7
-
8
- def self.seq_scans_sql
9
- <<-EOS
10
- SELECT relname AS name,
11
- seq_scan as count
12
- FROM
13
- pg_stat_user_tables
14
- ORDER BY seq_scan DESC;
15
- EOS
16
- end
17
- end