pgdexter 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c797cdeb10797636a6406b017fc9276ea6522656f6592769b5088bee56165cfb
4
- data.tar.gz: 76dc688fcea9ccde4aead259ef582f6103d62a5f40e7be668ee2b03347a14470
3
+ metadata.gz: 24fcff313ea4c5d059012c11e379f67c204608abe7445ca46c758d5e4a60cf0b
4
+ data.tar.gz: d9d78cbb690e6882f6218ae4b2280d6ae8857dff03fe633b9e4dee15be3c218d
5
5
  SHA512:
6
- metadata.gz: a5ac6bf812b56648ac0b1f864baf025b7cd4e81cccf6d6de65f1780fd63f8f1e640aff53aca771cece0ce54267ad7a428aaba8f42773591380547fac05bfe94a
7
- data.tar.gz: 7c0f8b36467cc5eacbc96f6e5e2132de3526ea9827cab9c5ede7e1eff2b471f22948e0b202f1a00fd8b37b785934eec8508ad561947e50efa9b9ffb07e5eb9ae
6
+ metadata.gz: b95d985d0179089bf824f5822664a4dfa6590e3886cc9e40166d3c621cc752b92563a7900bfc4d2a6774117b8580f77509e510e617e9a0538390529b45556e68
7
+ data.tar.gz: 7033709e507a94e75b3e5d6c326ebad361665c5172465fdc7090aebe58719a4c3e95ce1553a6e8d19990ff892955737594d08a5f7b3f60ea88056c208128a3d0
@@ -1,34 +1,38 @@
1
- ## 0.3.5
1
+ ## 0.3.6 (2020-03-30)
2
+
3
+ - Fixed warning with Ruby 2.7
4
+
5
+ ## 0.3.5 (2018-04-30)
2
6
 
3
7
  - Added `sql` input format
4
8
  - Fixed error for queries with double dash comments
5
9
  - Fixed connection threading issue with `--pg-stat-activity` option
6
10
 
7
- ## 0.3.4
11
+ ## 0.3.4 (2018-04-09)
8
12
 
9
13
  - Fixed `--username` option
10
14
  - Fixed `JSON::NestingError`
11
15
  - Added `--pg-stat-activity` option
12
16
 
13
- ## 0.3.3
17
+ ## 0.3.3 (2018-02-22)
14
18
 
15
19
  - Added support for views and materialized views
16
20
  - Better handle case when multiple indexes are found for a query
17
21
  - Added `--min-cost-savings-pct` option
18
22
 
19
- ## 0.3.2
23
+ ## 0.3.2 (2018-01-04)
20
24
 
21
25
  - Fixed parsing issue with named prepared statements
22
26
  - Fixed parsing issue with multiline queries in csv format
23
27
  - Better explanations for indexing decisions
24
28
 
25
- ## 0.3.1
29
+ ## 0.3.1 (2017-12-28)
26
30
 
27
31
  - Added support for queries with bind variables
28
32
  - Fixed error with streaming logs as csv format
29
33
  - Handle malformed CSV gracefully
30
34
 
31
- ## 0.3.0
35
+ ## 0.3.0 (2017-12-22)
32
36
 
33
37
  - Added support for schemas
34
38
  - Added support for csv format
@@ -36,12 +40,12 @@
36
40
  - Added `--min-calls` option
37
41
  - Fixed debug output when indexes not found
38
42
 
39
- ## 0.2.1
43
+ ## 0.2.1 (2017-09-02)
40
44
 
41
45
  - Fixed bad suggestions
42
46
  - Improved debugging output
43
47
 
44
- ## 0.2.0
48
+ ## 0.2.0 (2017-08-27)
45
49
 
46
50
  - Added same connection options as `psql`
47
51
  - Added support for multiple files
@@ -52,38 +56,38 @@ Breaking
52
56
 
53
57
  - `-h` option changed to `--host` instead of `--help` for consistency with `psql`
54
58
 
55
- ## 0.1.6
59
+ ## 0.1.6 (2017-08-26)
56
60
 
57
61
  - Significant performance improvements
58
62
  - Added `--include` option
59
63
 
60
- ## 0.1.5
64
+ ## 0.1.5 (2017-08-14)
61
65
 
62
66
  - Added support for non-`SELECT` queries
63
67
  - Added `--pg-stat-statements` option
64
68
  - Added advisory locks
65
69
  - Added support for running as a non-superuser
66
70
 
67
- ## 0.1.4
71
+ ## 0.1.4 (2017-07-02)
68
72
 
69
73
  - Added support for multicolumn indexes
70
74
 
71
- ## 0.1.3
75
+ ## 0.1.3 (2017-06-30)
72
76
 
73
77
  - Fixed error with non-lowercase columns
74
78
  - Fixed error with `json` columns
75
79
 
76
- ## 0.1.2
80
+ ## 0.1.2 (2017-06-26)
77
81
 
78
82
  - Added `--exclude` option
79
83
  - Added `--log-sql` option
80
84
 
81
- ## 0.1.1
85
+ ## 0.1.1 (2017-06-25)
82
86
 
83
87
  - Added `--interval` option
84
88
  - Added `--min-time` option
85
89
  - Added `--log-level` option
86
90
 
87
- ## 0.1.0
91
+ ## 0.1.0 (2017-06-24)
88
92
 
89
93
  - Launched
@@ -1,4 +1,4 @@
1
- Copyright (c) 2017 Andrew Kane
1
+ Copyright (c) 2017-2020 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  The automatic indexer for Postgres
4
4
 
5
- [Read about how it works](https://medium.com/@ankane/introducing-dexter-the-automatic-indexer-for-postgres-5f8fa8b28f27)
5
+ [Read about how it works](https://ankane.org/introducing-dexter)
6
6
 
7
7
  [![Build Status](https://travis-ci.org/ankane/dexter.svg?branch=master)](https://travis-ci.org/ankane/dexter)
8
8
 
@@ -12,8 +12,8 @@ First, install [HypoPG](https://github.com/HypoPG/hypopg) on your database serve
12
12
 
13
13
  ```sh
14
14
  cd /tmp
15
- curl -L https://github.com/HypoPG/hypopg/archive/1.1.1.tar.gz | tar xz
16
- cd hypopg-1.1.1
15
+ curl -L https://github.com/HypoPG/hypopg/archive/1.1.3.tar.gz | tar xz
16
+ cd hypopg-1.1.3
17
17
  make
18
18
  make install # may need sudo
19
19
  ```
@@ -228,18 +228,18 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
228
228
  - Write, clarify, or fix documentation
229
229
  - Suggest or add new features
230
230
 
231
- To get started, run:
231
+ To get started with development, run:
232
232
 
233
233
  ```sh
234
234
  git clone https://github.com/ankane/dexter.git
235
235
  cd dexter
236
- bundle
237
- rake install
236
+ bundle install
237
+ bundle exec rake install
238
238
  ```
239
239
 
240
240
  To run tests, use:
241
241
 
242
242
  ```sh
243
243
  createdb dexter_test
244
- rake test
244
+ bundle exec rake test
245
245
  ```
data/exe/dexter CHANGED
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # disable Slop warning with Ruby 2.7
4
+ # TODO remove when Slop > 4.8.0 is released
5
+ $VERBOSE = nil
6
+
7
+ # handle interrupts
8
+ trap("SIGINT") { abort }
9
+
3
10
  require "dexter"
4
- begin
5
- Dexter::Client.new(ARGV).perform
6
- rescue Dexter::Abort => e
7
- abort e.message
8
- rescue Interrupt => e
9
- # do nothing
10
- end
11
+ Dexter::Client.start
@@ -1,10 +1,14 @@
1
- require "dexter/version"
2
- require "slop"
1
+ # dependencies
3
2
  require "pg"
4
3
  require "pg_query"
5
- require "time"
4
+ require "slop"
5
+
6
+ # stdlib
6
7
  require "set"
7
- require "thread"
8
+ require "time"
9
+
10
+ # modules
11
+ require "dexter/version"
8
12
  require "dexter/logging"
9
13
  require "dexter/client"
10
14
  require "dexter/collector"
@@ -4,6 +4,12 @@ module Dexter
4
4
 
5
5
  attr_reader :arguments, :options
6
6
 
7
+ def self.start
8
+ Dexter::Client.new(ARGV).perform
9
+ rescue Dexter::Abort => e
10
+ abort e.message
11
+ end
12
+
7
13
  def initialize(args)
8
14
  @arguments, @options = parse_args(args)
9
15
  end
@@ -107,13 +107,13 @@ module Dexter
107
107
  analyze_tables(tables) if tables.any? && (@analyze || @log_level == "debug2")
108
108
 
109
109
  # create hypothetical indexes and explain queries
110
- candidates = tables.any? ? create_hypothetical_indexes(queries.select(&:candidate_tables), tables) : {}
110
+ candidates = tables.any? ? create_hypothetical_indexes(queries.select(&:candidate_tables)) : {}
111
111
 
112
112
  # see if new indexes were used and meet bar
113
113
  new_indexes = determine_indexes(queries, candidates, tables)
114
114
 
115
115
  # display and create new indexes
116
- show_and_create_indexes(new_indexes, queries, tables)
116
+ show_and_create_indexes(new_indexes, queries)
117
117
  end
118
118
 
119
119
  private
@@ -193,7 +193,7 @@ module Dexter
193
193
  end
194
194
  end
195
195
 
196
- def create_hypothetical_indexes(queries, tables)
196
+ def create_hypothetical_indexes(queries)
197
197
  candidates = {}
198
198
 
199
199
  # get initial costs for queries
@@ -417,7 +417,7 @@ module Dexter
417
417
  end
418
418
  end
419
419
 
420
- def show_and_create_indexes(new_indexes, queries, tables)
420
+ def show_and_create_indexes(new_indexes, queries)
421
421
  # print summary
422
422
  if new_indexes.any?
423
423
  new_indexes.each do |index|
@@ -3,7 +3,7 @@ module Dexter
3
3
  def perform
4
4
  # TODO support streaming
5
5
  @logfile.read.split(";").each do |statement|
6
- process_entry(statement, 1)
6
+ process_entry(statement, 0)
7
7
  end
8
8
  end
9
9
  end
@@ -1,3 +1,3 @@
1
1
  module Dexter
2
- VERSION = "0.3.5"
2
+ VERSION = "0.3.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pgdexter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-30 00:00:00.000000000 Z
11
+ date: 2020-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slop
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.0
19
+ version: '4.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: 4.2.0
26
+ version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pg
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.18.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.18.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pg_query
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -95,23 +95,16 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  description:
98
- email:
99
- - andrew@chartkick.com
98
+ email: andrew@chartkick.com
100
99
  executables:
101
100
  - dexter
102
101
  extensions: []
103
102
  extra_rdoc_files: []
104
103
  files:
105
- - ".gitignore"
106
- - ".travis.yml"
107
104
  - CHANGELOG.md
108
- - Gemfile
109
105
  - LICENSE.txt
110
106
  - README.md
111
- - Rakefile
112
107
  - exe/dexter
113
- - guides/Hosted-Postgres.md
114
- - guides/Linux.md
115
108
  - lib/dexter.rb
116
109
  - lib/dexter/client.rb
117
110
  - lib/dexter/collector.rb
@@ -124,9 +117,9 @@ files:
124
117
  - lib/dexter/query.rb
125
118
  - lib/dexter/sql_log_parser.rb
126
119
  - lib/dexter/version.rb
127
- - pgdexter.gemspec
128
120
  homepage: https://github.com/ankane/dexter
129
- licenses: []
121
+ licenses:
122
+ - MIT
130
123
  metadata: {}
131
124
  post_install_message:
132
125
  rdoc_options: []
@@ -136,15 +129,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
129
  requirements:
137
130
  - - ">="
138
131
  - !ruby/object:Gem::Version
139
- version: '0'
132
+ version: '2.2'
140
133
  required_rubygems_version: !ruby/object:Gem::Requirement
141
134
  requirements:
142
135
  - - ">="
143
136
  - !ruby/object:Gem::Version
144
137
  version: '0'
145
138
  requirements: []
146
- rubyforge_project:
147
- rubygems_version: 2.7.6
139
+ rubygems_version: 3.1.2
148
140
  signing_key:
149
141
  specification_version: 4
150
142
  summary: The automatic indexer for Postgres
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
@@ -1,18 +0,0 @@
1
- language: ruby
2
- rvm: 2.4.1
3
- cache: bundler
4
- script: bundle exec rake test
5
- addons:
6
- postgresql: "9.6"
7
- before_script:
8
- - sudo apt-get install postgresql-server-dev-9.6
9
- - git clone https://github.com/HypoPG/hypopg.git
10
- - cd hypopg
11
- - git checkout 1.1.1
12
- - make
13
- - sudo make install
14
- - psql -c 'create database dexter_test;' -U postgres
15
- notifications:
16
- email:
17
- on_success: never
18
- on_failure: change
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in dexter.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,11 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
8
- t.warning = false
9
- end
10
-
11
- task default: :test
@@ -1,102 +0,0 @@
1
- # Hosted Postgres
2
-
3
- Some hosted providers like Amazon RDS and Heroku do not support the HypoPG extension, which Dexter needs to run. Hopefully this will change with time. For now, we can spin up a separate database instance to run Dexter. It’s not super convenient, but can be useful to do from time to time.
4
-
5
- ### Install Postgres and Ruby
6
-
7
- Linux
8
-
9
- ```sh
10
- sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
11
- sudo apt-get install -y wget ca-certificates
12
- wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
13
- sudo apt-get update
14
- sudo apt-get install -y postgresql-9.6 postgresql-server-dev-9.6
15
- sudo -u postgres createuser $(whoami) -s
16
- sudo apt-get install -y ruby2.2 ruby2.2-dev
17
- ```
18
-
19
- Mac
20
-
21
- ```sh
22
- brew install postgresql
23
- brew install ruby
24
- ```
25
-
26
- ### Install HypoPG and Dexter
27
-
28
- HypoPG
29
-
30
- ```sh
31
- cd /tmp
32
- curl -L https://github.com/dalibo/hypopg/archive/1.0.0.tar.gz | tar xz
33
- cd hypopg-1.0.0
34
- make
35
- make install # may need sudo
36
- ```
37
-
38
- Dexter
39
-
40
- ```sh
41
- gem install pgdexter # may need sudo
42
- ```
43
-
44
- ### Download logs
45
-
46
- #### Amazon RDS
47
-
48
- Create an IAM user with the policy below:
49
-
50
- ```
51
- {
52
- "Statement": [
53
- {
54
- "Action": [
55
- "rds:DescribeDBLogFiles",
56
- "rds:DownloadDBLogFilePortion"
57
- ],
58
- "Effect": "Allow",
59
- "Resource": "*"
60
- }
61
- ]
62
- }
63
- ```
64
-
65
- And run:
66
-
67
- ```sh
68
- aws configure
69
- gem install pghero_logs # may need sudo
70
- pghero_logs download <instance-id>
71
- ```
72
-
73
- #### Heroku
74
-
75
- Production-tier databases only
76
-
77
- ```sh
78
- heroku logs -p postgres > postgresql.log
79
- ```
80
-
81
- ### Dump and restore
82
-
83
- We recommend creating a new instance from a snapshot for the dump to avoid affecting customers.
84
-
85
- ```sh
86
- pg_dump -v -j 8 -Fd -f /tmp/newout.dir <connection-options>
87
- ```
88
-
89
- Then shutdown the dump instance. Restore with:
90
-
91
- ```sh
92
- createdb dexter_restore
93
- pg_restore -v -j 8 -x -O --format=d -d dexter_restore /tmp/newout.dir/
94
- ```
95
-
96
- ### Run Dexter
97
-
98
- ```sh
99
- dexter dexter_restore postgresql.log* --analyze
100
- ```
101
-
102
- :tada:
@@ -1,72 +0,0 @@
1
- # Linux Packages
2
-
3
- Distributions
4
-
5
- - [Ubuntu 16.04 (Xenial)](#ubuntu-1604-xenial)
6
- - [Ubuntu 14.04 (Trusty)](#ubuntu-1404-trusty)
7
- - [Debian 9 (Stretch)](#debian-9-stretch)
8
- - [Debian 8 (Jesse)](#debian-8-jesse)
9
- - [CentOS / RHEL 7](#centos--rhel-7)
10
- - [SUSE Linux Enterprise Server 12](#suse-linux-enterprise-server-12)
11
-
12
- ### Ubuntu 16.04 (Xenial)
13
-
14
- ```sh
15
- wget -qO- https://dl.packager.io/srv/pghero/dexter/key | sudo apt-key add -
16
- sudo wget -O /etc/apt/sources.list.d/dexter.list \
17
- https://dl.packager.io/srv/pghero/dexter/master/installer/ubuntu/16.04.repo
18
- sudo apt-get update
19
- sudo apt-get -y install dexter
20
- ```
21
-
22
- ### Ubuntu 14.04 (Trusty)
23
-
24
- ```sh
25
- wget -qO- https://dl.packager.io/srv/pghero/dexter/key | sudo apt-key add -
26
- sudo wget -O /etc/apt/sources.list.d/dexter.list \
27
- https://dl.packager.io/srv/pghero/dexter/master/installer/ubuntu/14.04.repo
28
- sudo apt-get update
29
- sudo apt-get install dexter
30
- ```
31
-
32
- ### Debian 9 (Stretch)
33
-
34
- ```sh
35
- sudo apt-get -y install apt-transport-https
36
- wget -qO- https://dl.packager.io/srv/pghero/dexter/key | sudo apt-key add -
37
- sudo wget -O /etc/apt/sources.list.d/dexter.list \
38
- https://dl.packager.io/srv/pghero/dexter/master/installer/debian/9.repo
39
- sudo apt-get update
40
- sudo apt-get install dexter
41
- ```
42
-
43
- ### Debian 8 (Jesse)
44
-
45
- ```sh
46
- sudo apt-get -y install apt-transport-https
47
- wget -qO- https://dl.packager.io/srv/pghero/dexter/key | sudo apt-key add -
48
- sudo wget -O /etc/apt/sources.list.d/dexter.list \
49
- https://dl.packager.io/srv/pghero/dexter/master/installer/debian/8.repo
50
- sudo apt-get update
51
- sudo apt-get install dexter
52
- ```
53
-
54
- ### CentOS / RHEL 7
55
-
56
- ```sh
57
- sudo wget -O /etc/yum.repos.d/dexter.repo \
58
- https://dl.packager.io/srv/pghero/dexter/master/installer/el/7.repo
59
- sudo yum install dexter
60
- ```
61
-
62
- ### SUSE Linux Enterprise Server 12
63
-
64
- ```sh
65
- sudo wget -O /etc/zypp/repos.d/dexter.repo \
66
- https://dl.packager.io/srv/pghero/dexter/master/installer/sles/12.repo
67
- sudo zypper install dexter
68
- ```
69
-
70
- ## Credits
71
-
72
- :heart: Made possible by [Packager](https://packager.io/)
@@ -1,30 +0,0 @@
1
- # coding: utf-8
2
-
3
- lib = File.expand_path("../lib", __FILE__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require "dexter/version"
6
-
7
- Gem::Specification.new do |spec|
8
- spec.name = "pgdexter"
9
- spec.version = Dexter::VERSION
10
- spec.authors = ["Andrew Kane"]
11
- spec.email = ["andrew@chartkick.com"]
12
-
13
- spec.summary = "The automatic indexer for Postgres"
14
- spec.homepage = "https://github.com/ankane/dexter"
15
-
16
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
- f.match(%r{^(test|spec|features)/})
18
- end
19
- spec.bindir = "exe"
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
- spec.require_paths = ["lib"]
22
-
23
- spec.add_dependency "slop", ">= 4.2.0"
24
- spec.add_dependency "pg"
25
- spec.add_dependency "pg_query"
26
-
27
- spec.add_development_dependency "bundler"
28
- spec.add_development_dependency "rake"
29
- spec.add_development_dependency "minitest"
30
- end