pgchief 0.4.0 → 0.5.1
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/CHANGELOG.md +20 -1
- data/README.md +3 -2
- data/lib/pgchief/command/database_restore.rb +58 -0
- data/lib/pgchief/command/s3_upload.rb +0 -1
- data/lib/pgchief/database/backups.rb +55 -0
- data/lib/pgchief/database.rb +4 -0
- data/lib/pgchief/prompt/backup_database.rb +1 -1
- data/lib/pgchief/prompt/database_management.rb +2 -1
- data/lib/pgchief/prompt/restore_database.rb +16 -0
- data/lib/pgchief/version.rb +1 -1
- data/lib/pgchief.rb +5 -2
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22c8374fdee4a24fde56bb1edd737694551b73288643b93078efa5f73c149a1b
|
4
|
+
data.tar.gz: bbebe5882166def3e96dc08804d695c4c2f9d629735173fbde82dcfcd70aaa1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fd0d65a33b1370a2dda33e4ecd06710b7140eefe911c4f3f9eadbe2bea81bd272a43b8bf013c472afa0cee035f785bd9336d8521b86210536cef43dffc944a8
|
7
|
+
data.tar.gz: 3314266704ccb6db85feffdd93a104441565bf89f034295f0ce29d4d3f6783e5ccc134964a409c5885066852f27975c062773b77c6a126cc159dbaace3d8bde3
|
data/CHANGELOG.md
CHANGED
@@ -13,6 +13,23 @@ and this project will try its best to adhere to [Semantic Versioning](https://se
|
|
13
13
|
|
14
14
|
### Fixes
|
15
15
|
|
16
|
+
## [0.5.1]
|
17
|
+
|
18
|
+
### Changes
|
19
|
+
|
20
|
+
* Update README to note that libpq-dev is a required dependency in order to build
|
21
|
+
|
22
|
+
### Fixes
|
23
|
+
|
24
|
+
* Remove `pry` from being required.
|
25
|
+
|
26
|
+
## [0.5.0]
|
27
|
+
|
28
|
+
### Additions
|
29
|
+
|
30
|
+
* Restore database from local file(s)
|
31
|
+
* Restore database from s3
|
32
|
+
|
16
33
|
## [0.4.0]
|
17
34
|
|
18
35
|
### Changes
|
@@ -91,7 +108,9 @@ and this project will try its best to adhere to [Semantic Versioning](https://se
|
|
91
108
|
- Drop user ✅
|
92
109
|
- List databases ✅
|
93
110
|
|
94
|
-
[Unreleased]: https://github.com/jayroh/pgchief/compare/v0.
|
111
|
+
[Unreleased]: https://github.com/jayroh/pgchief/compare/v0.5.1...HEAD
|
112
|
+
[0.5.1]: https://github.com/jayroh/pgchief/releases/tag/v0.5.1
|
113
|
+
[0.5.0]: https://github.com/jayroh/pgchief/releases/tag/v0.5.0
|
95
114
|
[0.4.0]: https://github.com/jayroh/pgchief/releases/tag/v0.4.0
|
96
115
|
[0.3.1]: https://github.com/jayroh/pgchief/releases/tag/v0.3.1
|
97
116
|
[0.3.0]: https://github.com/jayroh/pgchief/releases/tag/v0.3.0
|
data/README.md
CHANGED
@@ -24,6 +24,7 @@ below for the feature check-list and current progress.
|
|
24
24
|
## Usage
|
25
25
|
|
26
26
|
```sh
|
27
|
+
# System dependency `libpq-dev` must be installed
|
27
28
|
gem install pgchief
|
28
29
|
|
29
30
|
# To initialize the config file at `~/.config/pgchief/config.toml`:
|
@@ -132,7 +133,7 @@ Give "rando-username" access to database(s):
|
|
132
133
|
* [x] Display connection information
|
133
134
|
* [x] Back up database locally
|
134
135
|
* [x] Back up database to S3
|
135
|
-
* [
|
136
|
-
* [
|
136
|
+
* [x] Restore local database
|
137
|
+
* [x] Restore remote database @ S3
|
137
138
|
* [ ] Quickly back up via command line option
|
138
139
|
* [ ] Quickly restore via command line option
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
module Pgchief
|
6
|
+
module Command
|
7
|
+
# Command object to restore a database
|
8
|
+
class DatabaseRestore < Base
|
9
|
+
extend Forwardable
|
10
|
+
|
11
|
+
attr_reader :database, :filename
|
12
|
+
|
13
|
+
def_delegators :s3, :configured?, :client, :bucket, :path
|
14
|
+
|
15
|
+
def call
|
16
|
+
@database = params.first
|
17
|
+
@filename = params.last
|
18
|
+
raise Pgchief::Errors::DatabaseMissingError unless db_exists?
|
19
|
+
|
20
|
+
download! if configured?
|
21
|
+
restore!
|
22
|
+
|
23
|
+
"Database '#{database}' restored from #{filename}"
|
24
|
+
rescue PG::Error => e
|
25
|
+
"Error: #{e.message}"
|
26
|
+
ensure
|
27
|
+
conn.close
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def download!
|
33
|
+
client.get_object(
|
34
|
+
bucket: bucket,
|
35
|
+
key: "#{path}#{filename}",
|
36
|
+
response_target: local_location
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
def restore!
|
41
|
+
`pg_restore --clean --no-owner --dbname=#{Pgchief::Config.pgurl}/#{database} #{local_location}`
|
42
|
+
end
|
43
|
+
|
44
|
+
def db_exists?
|
45
|
+
query = "SELECT 1 FROM pg_database WHERE datname = '#{database}'"
|
46
|
+
conn.exec(query).any?
|
47
|
+
end
|
48
|
+
|
49
|
+
def local_location
|
50
|
+
"#{Pgchief::Config.backup_dir}/#{filename}"
|
51
|
+
end
|
52
|
+
|
53
|
+
def s3
|
54
|
+
Pgchief::Config.s3
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
module Pgchief
|
6
|
+
class Database
|
7
|
+
# Get a list of all backups for a given database
|
8
|
+
class Backups
|
9
|
+
extend Forwardable
|
10
|
+
|
11
|
+
def_delegators :s3, :bucket, :path, :client
|
12
|
+
|
13
|
+
def self.for(database, remote)
|
14
|
+
new(database, remote).for
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :database, :remote
|
18
|
+
|
19
|
+
def initialize(database, remote)
|
20
|
+
@database = database
|
21
|
+
@remote = remote
|
22
|
+
end
|
23
|
+
|
24
|
+
def for
|
25
|
+
remote ? remote_backups : local_backups
|
26
|
+
end
|
27
|
+
|
28
|
+
def remote_backups
|
29
|
+
@remote_backups ||= client.list_objects(
|
30
|
+
bucket: bucket,
|
31
|
+
prefix: "#{path}#{database}-"
|
32
|
+
).contents
|
33
|
+
.map(&:key)
|
34
|
+
.sort
|
35
|
+
.last(3)
|
36
|
+
.reverse
|
37
|
+
.map { |f| File.basename(f) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def local_backups
|
41
|
+
Dir["#{Pgchief::Config.backup_dir}#{database}-*.dump"]
|
42
|
+
.sort_by { |f| File.mtime(f) }
|
43
|
+
.reverse
|
44
|
+
.last(3)
|
45
|
+
.map { |f| File.basename(f) }
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def s3
|
51
|
+
Pgchief::Config.s3
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/pgchief/database.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Pgchief
|
4
|
+
module Prompt
|
5
|
+
# Class to prompt for which database to restore
|
6
|
+
class RestoreDatabase < Base
|
7
|
+
def call
|
8
|
+
database = prompt.select("Which database needs restoring?", Pgchief::Database.all)
|
9
|
+
local_file = prompt.select("Which backup file do you want to restore?", Pgchief::Database.backups_for(database))
|
10
|
+
result = Pgchief::Command::DatabaseRestore.call(database, local_file)
|
11
|
+
|
12
|
+
prompt.say result
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/pgchief/version.rb
CHANGED
data/lib/pgchief.rb
CHANGED
@@ -11,18 +11,20 @@ require "pgchief/config/s3"
|
|
11
11
|
require "pgchief/connection_string"
|
12
12
|
require "pgchief/version"
|
13
13
|
require "pgchief/database"
|
14
|
+
require "pgchief/database/backups"
|
14
15
|
require "pgchief/user"
|
15
16
|
|
16
17
|
require "pgchief/prompt/base"
|
17
|
-
require "pgchief/prompt/start"
|
18
18
|
require "pgchief/prompt/backup_database"
|
19
19
|
require "pgchief/prompt/create_database"
|
20
20
|
require "pgchief/prompt/create_user"
|
21
21
|
require "pgchief/prompt/database_management"
|
22
22
|
require "pgchief/prompt/drop_database"
|
23
23
|
require "pgchief/prompt/drop_user"
|
24
|
-
require "pgchief/prompt/user_management"
|
25
24
|
require "pgchief/prompt/grant_database_privileges"
|
25
|
+
require "pgchief/prompt/restore_database"
|
26
|
+
require "pgchief/prompt/start"
|
27
|
+
require "pgchief/prompt/user_management"
|
26
28
|
require "pgchief/prompt/view_database_connection_string"
|
27
29
|
|
28
30
|
require "pgchief/command"
|
@@ -33,6 +35,7 @@ require "pgchief/command/database_create"
|
|
33
35
|
require "pgchief/command/database_drop"
|
34
36
|
require "pgchief/command/database_list"
|
35
37
|
require "pgchief/command/database_privileges_grant"
|
38
|
+
require "pgchief/command/database_restore"
|
36
39
|
require "pgchief/command/retrieve_connection_string"
|
37
40
|
require "pgchief/command/s3_upload"
|
38
41
|
require "pgchief/command/store_connection_string"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pgchief
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Oliveira
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-s3
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- lib/pgchief/command/database_drop.rb
|
109
109
|
- lib/pgchief/command/database_list.rb
|
110
110
|
- lib/pgchief/command/database_privileges_grant.rb
|
111
|
+
- lib/pgchief/command/database_restore.rb
|
111
112
|
- lib/pgchief/command/retrieve_connection_string.rb
|
112
113
|
- lib/pgchief/command/s3_upload.rb
|
113
114
|
- lib/pgchief/command/store_connection_string.rb
|
@@ -118,6 +119,7 @@ files:
|
|
118
119
|
- lib/pgchief/config/s3.rb
|
119
120
|
- lib/pgchief/connection_string.rb
|
120
121
|
- lib/pgchief/database.rb
|
122
|
+
- lib/pgchief/database/backups.rb
|
121
123
|
- lib/pgchief/prompt.rb
|
122
124
|
- lib/pgchief/prompt/backup_database.rb
|
123
125
|
- lib/pgchief/prompt/base.rb
|
@@ -127,6 +129,7 @@ files:
|
|
127
129
|
- lib/pgchief/prompt/drop_database.rb
|
128
130
|
- lib/pgchief/prompt/drop_user.rb
|
129
131
|
- lib/pgchief/prompt/grant_database_privileges.rb
|
132
|
+
- lib/pgchief/prompt/restore_database.rb
|
130
133
|
- lib/pgchief/prompt/start.rb
|
131
134
|
- lib/pgchief/prompt/user_management.rb
|
132
135
|
- lib/pgchief/prompt/view_database_connection_string.rb
|