rails-pg-extras 2.2.0 → 3.2.2
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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +2 -1
- data/README.md +31 -3
- data/lib/rails-pg-extras/diagnose_data.rb +12 -0
- data/lib/rails-pg-extras/diagnose_print.rb +12 -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/tasks/all.rake +5 -0
- data/lib/rails-pg-extras/version.rb +1 -1
- data/lib/rails-pg-extras.rb +46 -0
- data/rails-pg-extras-diagnose.png +0 -0
- data/rails-pg-extras-web.png +0 -0
- data/spec/smoke_spec.rb +14 -5
- data/spec/spec_helper.rb +3 -0
- metadata +12 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e274fc39b73b8bdaf1b0f0f2a92fed8024e99b2796b208967f87d796ae9edbd2
|
4
|
+
data.tar.gz: 34cdb4362d0fd7240c4eac857cfd24d342a4e99eed7cda2eb20791bd8bce6c86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d9045c9281c65bb9648898102d534e0cecc05a675949cd394900e8b7c821fb46b69e93e4fbb6243d470a77568858ce3295f61c95ce86737e604f7b687cbf05bd
|
7
|
+
data.tar.gz: fa66c8f4f06f233a2a2a8288d69c5e4fb257c1c2801f4c7f8c90bac722a4d82cce439759c2fe893986043ba3a30816ccd31e155ed6ab8e1666717d34a549cb5f
|
data/.circleci/config.yml
CHANGED
@@ -31,7 +31,8 @@ jobs:
|
|
31
31
|
- checkout
|
32
32
|
- run: gem update --system
|
33
33
|
- run: gem install bundler
|
34
|
-
- run: bundle
|
34
|
+
- run: bundle config set --local path 'vendor/bundle'
|
35
|
+
- run: bundle install
|
35
36
|
- run: sudo apt-get update --allow-releaseinfo-change
|
36
37
|
- run: sudo apt install postgresql-client
|
37
38
|
- run: dockerize -wait tcp://postgres11:5432 -timeout 1m
|
data/README.md
CHANGED
@@ -32,7 +32,7 @@ In your Gemfile
|
|
32
32
|
gem "rails-pg-extras"
|
33
33
|
```
|
34
34
|
|
35
|
-
|
35
|
+
`calls` and `outliers` queries require [pg_stat_statements](https://www.postgresql.org/docs/current/pgstatstatements.html) extension.
|
36
36
|
|
37
37
|
You can check if it is enabled in your database by running:
|
38
38
|
|
@@ -45,6 +45,12 @@ You should see the similar line in the output:
|
|
45
45
|
| pg_stat_statements | 1.7 | 1.7 | track execution statistics of all SQL statements executed |
|
46
46
|
```
|
47
47
|
|
48
|
+
`ssl_used` requires `sslinfo` extension, and `buffercache_usage`/`buffercache_usage` queries need `pg_buffercache`. You can enable them all by running:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
RailsPGExtras.add_extensions
|
52
|
+
```
|
53
|
+
|
48
54
|
## Usage
|
49
55
|
|
50
56
|
Each command can be used as a rake task, or a directly from the Ruby code.
|
@@ -91,6 +97,20 @@ RailsPGExtras.long_running_queries(args: { threshold: "200 milliseconds" })
|
|
91
97
|
|
92
98
|
```
|
93
99
|
|
100
|
+
## Diagnose report
|
101
|
+
|
102
|
+
The simplest way to start using pg-extras is to execute a `diagnose` method. It runs a set of checks and prints out a report highlighting areas that may require additional investigation:
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
RailsPGExtras.diagnose
|
106
|
+
|
107
|
+
$ rake pg_extras:diagnose
|
108
|
+
```
|
109
|
+
|
110
|
+

|
111
|
+
|
112
|
+
Keep reading to learn about methods that `diagnose` uses under the hood.
|
113
|
+
|
94
114
|
## Available methods
|
95
115
|
|
96
116
|
### `cache_hit`
|
@@ -173,7 +193,7 @@ This method displays values for selected PostgreSQL settings. You can compare th
|
|
173
193
|
|
174
194
|
[More info](https://pawelurbanek.com/postgresql-fix-performance#cache-hit)
|
175
195
|
|
176
|
-
###
|
196
|
+
### `ssl_used`
|
177
197
|
|
178
198
|
```ruby
|
179
199
|
|
@@ -398,7 +418,7 @@ This command displays the total size of each table and materialized view in the
|
|
398
418
|
### `unused_indexes`
|
399
419
|
|
400
420
|
```ruby
|
401
|
-
RailsPGExtras.unused_indexes(args: {
|
421
|
+
RailsPGExtras.unused_indexes(args: { max_scans: 20 })
|
402
422
|
|
403
423
|
$ rake pg_extras:unused_indexes
|
404
424
|
|
@@ -557,6 +577,14 @@ RailsPGExtras.kill_all
|
|
557
577
|
|
558
578
|
This commands kills all the currently active connections to the database. It can be useful as a last resort when your database is stuck in a deadlock.
|
559
579
|
|
580
|
+
### `pg_stat_statements_reset`
|
581
|
+
|
582
|
+
```ruby
|
583
|
+
RailsPGExtras.pg_stat_statements_reset
|
584
|
+
```
|
585
|
+
|
586
|
+
This command discards all statistics gathered so far by pg_stat_statements.
|
587
|
+
|
560
588
|
### `buffercache_stats`
|
561
589
|
|
562
590
|
```ruby
|
data/lib/rails-pg-extras.rb
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'terminal-table'
|
4
4
|
require 'ruby-pg-extras'
|
5
|
+
require 'rails-pg-extras/diagnose_data'
|
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'
|
5
11
|
|
6
12
|
module RailsPGExtras
|
7
13
|
QUERIES = RubyPGExtras::QUERIES
|
@@ -44,6 +50,46 @@ module RailsPGExtras
|
|
44
50
|
)
|
45
51
|
end
|
46
52
|
|
53
|
+
def self.diagnose(in_format: :display_table)
|
54
|
+
data = RailsPGExtras::DiagnoseData.call
|
55
|
+
|
56
|
+
if in_format == :display_table
|
57
|
+
RailsPGExtras::DiagnosePrint.call(data)
|
58
|
+
elsif in_format == :hash
|
59
|
+
data
|
60
|
+
else
|
61
|
+
raise "Invalid 'in_format' argument!"
|
62
|
+
end
|
63
|
+
end
|
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
|
+
|
47
93
|
def self.connection
|
48
94
|
ActiveRecord::Base.connection
|
49
95
|
end
|
Binary file
|
data/rails-pg-extras-web.png
CHANGED
Binary file
|
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: 2.2
|
4
|
+
version: 3.2.2
|
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-18 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: 2.2
|
19
|
+
version: 3.2.2
|
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: 2.2
|
26
|
+
version: 3.2.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,9 +83,16 @@ files:
|
|
83
83
|
- Rakefile
|
84
84
|
- docker-compose.yml.sample
|
85
85
|
- lib/rails-pg-extras.rb
|
86
|
+
- lib/rails-pg-extras/diagnose_data.rb
|
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
|
86
90
|
- lib/rails-pg-extras/railtie.rb
|
91
|
+
- lib/rails-pg-extras/table_info.rb
|
92
|
+
- lib/rails-pg-extras/table_info_print.rb
|
87
93
|
- lib/rails-pg-extras/tasks/all.rake
|
88
94
|
- lib/rails-pg-extras/version.rb
|
95
|
+
- rails-pg-extras-diagnose.png
|
89
96
|
- rails-pg-extras-web.png
|
90
97
|
- rails-pg-extras.gemspec
|
91
98
|
- spec/smoke_spec.rb
|
@@ -109,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
116
|
- !ruby/object:Gem::Version
|
110
117
|
version: '0'
|
111
118
|
requirements: []
|
112
|
-
rubygems_version: 3.
|
119
|
+
rubygems_version: 3.0.3
|
113
120
|
signing_key:
|
114
121
|
specification_version: 4
|
115
122
|
summary: Rails PostgreSQL performance database insights
|