rails-pg-extras 3.0.6 → 3.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -0
- data/lib/rails-pg-extras/index_info.rb +11 -0
- data/lib/rails-pg-extras/index_info_print.rb +6 -0
- data/lib/rails-pg-extras/table_info.rb +11 -0
- data/lib/rails-pg-extras/table_info_print.rb +6 -0
- data/lib/rails-pg-extras/version.rb +1 -1
- data/lib/rails-pg-extras.rb +32 -0
- data/spec/smoke_spec.rb +14 -5
- data/spec/spec_helper.rb +3 -0
- metadata +9 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e031e302ba7d1d37ee90ac720128a69fb39c75d83b98bf2f7163e6689019b71
|
4
|
+
data.tar.gz: 5dc53d1aa42831aaa4b208efb60ea0757e2703e47260b63c886d5b242577a216
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: febe02de1484d4b29d444bdba8b74b731a6516c93ece6d3f798a39022a93c9447eb14b39edcaa5a6685c39da8d02e107fda3e5760a02922ef2172fbf08bb82a2
|
7
|
+
data.tar.gz: 863595f41a38414e4f8e2fc18cddea442b5f90f9ba2ebc2e906a8db704ef3a9a39c9fc7ad504ba332e8c780018fe1ebbd590d98914e5edadb664afae29b3ad49
|
data/README.md
CHANGED
@@ -103,6 +103,8 @@ The simplest way to start using pg-extras is to execute a `diagnose` method. It
|
|
103
103
|
|
104
104
|
```ruby
|
105
105
|
RailsPGExtras.diagnose
|
106
|
+
|
107
|
+
$ rake pg_extras:diagnose
|
106
108
|
```
|
107
109
|
|
108
110
|
![Diagnose report](https://github.com/pawurb/rails-pg-extras/raw/master/rails-pg-extras-diagnose.png)
|
@@ -111,6 +113,38 @@ Keep reading to learn about methods that `diagnose` uses under the hood.
|
|
111
113
|
|
112
114
|
## Available methods
|
113
115
|
|
116
|
+
### `table_info`
|
117
|
+
|
118
|
+
This method displays metadata metrics for all or a selected table. You can use it to check the table's size, its cache hit metrics, and whether it is correctly indexed. Many sequential scans or no index scans are potential indicators of misconfigured indexes. This method aggregates data provided by other methods in an easy to analyze summary format.
|
119
|
+
|
120
|
+
```ruby
|
121
|
+
RailsPGExtras.table_info(args: { table_name: "users" })
|
122
|
+
|
123
|
+
| Table name | Table size | Table cache hit | Indexes cache hit | Estimated rows | Sequential scans | Indexes scans |
|
124
|
+
+------------+------------+-------------------+--------------------+----------------+------------------+---------------+
|
125
|
+
| users | 2432 kB | 0.999966685701511 | 0.9988780464661853 | 16650 | 2128 | 512496 |
|
126
|
+
|
127
|
+
```
|
128
|
+
|
129
|
+
### `index_info`
|
130
|
+
|
131
|
+
This method returns summary info about database indexes. You can check index size, how often it is used and what percentage of its total size are NULL values. Like the previous method, it aggregates data from other helper methods in an easy-to-digest format.
|
132
|
+
|
133
|
+
```ruby
|
134
|
+
|
135
|
+
RailsPGExtras.index_info(args: { table_name: "users" })
|
136
|
+
|
137
|
+
| Index name | Table name | Columns | Index size | Index scans | Null frac |
|
138
|
+
+-------------------------------+------------+----------------+------------+-------------+-----------+
|
139
|
+
| users_pkey | users | id | 1152 kB | 163007 | 0.00% |
|
140
|
+
| index_users_on_slack_id | users | slack_id | 1080 kB | 258870 | 0.00% |
|
141
|
+
| index_users_on_team_id | users | team_id | 816 kB | 70962 | 0.00% |
|
142
|
+
| index_users_on_uuid | users | uuid | 1032 kB | 0 | 0.00% |
|
143
|
+
| index_users_on_block_uuid | users | block_uuid | 776 kB | 19502 | 100.00% |
|
144
|
+
| index_users_on_api_auth_token | users | api_auth_token | 1744 kB | 156 | 0.00% |
|
145
|
+
|
146
|
+
```
|
147
|
+
|
114
148
|
### `cache_hit`
|
115
149
|
|
116
150
|
```ruby
|
data/lib/rails-pg-extras.rb
CHANGED
@@ -4,6 +4,10 @@ require 'terminal-table'
|
|
4
4
|
require 'ruby-pg-extras'
|
5
5
|
require 'rails-pg-extras/diagnose_data'
|
6
6
|
require 'rails-pg-extras/diagnose_print'
|
7
|
+
require 'rails-pg-extras/index_info'
|
8
|
+
require 'rails-pg-extras/index_info_print'
|
9
|
+
require 'rails-pg-extras/table_info'
|
10
|
+
require 'rails-pg-extras/table_info_print'
|
7
11
|
|
8
12
|
module RailsPGExtras
|
9
13
|
QUERIES = RubyPGExtras::QUERIES
|
@@ -58,6 +62,34 @@ module RailsPGExtras
|
|
58
62
|
end
|
59
63
|
end
|
60
64
|
|
65
|
+
def self.index_info(args: {}, in_format: :display_table)
|
66
|
+
data = RailsPGExtras::IndexInfo.call(args[:table_name])
|
67
|
+
|
68
|
+
if in_format == :display_table
|
69
|
+
RailsPGExtras::IndexInfoPrint.call(data)
|
70
|
+
elsif in_format == :hash
|
71
|
+
data
|
72
|
+
elsif in_format == :array
|
73
|
+
data.map(&:values)
|
74
|
+
else
|
75
|
+
raise "Invalid 'in_format' argument!"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.table_info(args: {}, in_format: :display_table)
|
80
|
+
data = RailsPGExtras::TableInfo.call(args[:table_name])
|
81
|
+
|
82
|
+
if in_format == :display_table
|
83
|
+
RailsPGExtras::TableInfoPrint.call(data)
|
84
|
+
elsif in_format == :hash
|
85
|
+
data
|
86
|
+
elsif in_format == :array
|
87
|
+
data.map(&:values)
|
88
|
+
else
|
89
|
+
raise "Invalid 'in_format' argument!"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
61
93
|
def self.connection
|
62
94
|
ActiveRecord::Base.connection
|
63
95
|
end
|
data/spec/smoke_spec.rb
CHANGED
@@ -3,11 +3,6 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe RailsPGExtras do
|
6
|
-
before(:all) do
|
7
|
-
RailsPGExtras.connection.execute("CREATE EXTENSION IF NOT EXISTS pg_buffercache;")
|
8
|
-
RubyPGExtras.connection.exec("CREATE EXTENSION IF NOT EXISTS pg_stat_statements;")
|
9
|
-
end
|
10
|
-
|
11
6
|
RailsPGExtras::QUERIES.each do |query_name|
|
12
7
|
it "#{query_name} query can be executed" do
|
13
8
|
expect do
|
@@ -18,4 +13,18 @@ describe RailsPGExtras do
|
|
18
13
|
end.not_to raise_error
|
19
14
|
end
|
20
15
|
end
|
16
|
+
|
17
|
+
it "runs the custom methods" do
|
18
|
+
expect do
|
19
|
+
RailsPGExtras.diagnose(in_format: :hash)
|
20
|
+
end.not_to raise_error
|
21
|
+
|
22
|
+
expect do
|
23
|
+
RailsPGExtras.index_info(in_format: :hash)
|
24
|
+
end.not_to raise_error
|
25
|
+
|
26
|
+
expect do
|
27
|
+
RailsPGExtras.table_info(in_format: :hash)
|
28
|
+
end.not_to raise_error
|
29
|
+
end
|
21
30
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -24,6 +24,9 @@ RSpec.configure do |config|
|
|
24
24
|
ActiveRecord::Base.establish_connection(
|
25
25
|
ENV.fetch("DATABASE_URL")
|
26
26
|
)
|
27
|
+
RailsPGExtras.connection.execute("CREATE EXTENSION IF NOT EXISTS pg_stat_statements;")
|
28
|
+
RailsPGExtras.connection.execute("CREATE EXTENSION IF NOT EXISTS pg_buffercache;")
|
29
|
+
RailsPGExtras.connection.execute("CREATE EXTENSION IF NOT EXISTS sslinfo;")
|
27
30
|
end
|
28
31
|
|
29
32
|
config.after :suite do
|
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: 3.
|
4
|
+
version: 3.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pawurb
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-pg-extras
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.
|
19
|
+
version: 3.2.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.
|
26
|
+
version: 3.2.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -85,7 +85,11 @@ files:
|
|
85
85
|
- lib/rails-pg-extras.rb
|
86
86
|
- lib/rails-pg-extras/diagnose_data.rb
|
87
87
|
- lib/rails-pg-extras/diagnose_print.rb
|
88
|
+
- lib/rails-pg-extras/index_info.rb
|
89
|
+
- lib/rails-pg-extras/index_info_print.rb
|
88
90
|
- lib/rails-pg-extras/railtie.rb
|
91
|
+
- lib/rails-pg-extras/table_info.rb
|
92
|
+
- lib/rails-pg-extras/table_info_print.rb
|
89
93
|
- lib/rails-pg-extras/tasks/all.rake
|
90
94
|
- lib/rails-pg-extras/version.rb
|
91
95
|
- rails-pg-extras-diagnose.png
|
@@ -112,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
116
|
- !ruby/object:Gem::Version
|
113
117
|
version: '0'
|
114
118
|
requirements: []
|
115
|
-
rubygems_version: 3.
|
119
|
+
rubygems_version: 3.0.3
|
116
120
|
signing_key:
|
117
121
|
specification_version: 4
|
118
122
|
summary: Rails PostgreSQL performance database insights
|