data_keeper 0.1.1 → 0.1.5
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/README.md +3 -0
- data/lib/data_keeper/definition.rb +7 -9
- data/lib/data_keeper/dumper.rb +2 -2
- data/lib/data_keeper/loader.rb +24 -3
- data/lib/data_keeper/version.rb +1 -1
- data/lib/data_keeper.rb +11 -7
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fc356b01f1619f2ec815a556092bd13fc28b44b2b201707c6a820da00fcff70
|
4
|
+
data.tar.gz: 8f2d4dcc59035b7fee1131daa3cfed6dedb0bf5c635e781d48dc65c7c43a58e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5102f1e716045e8bc425d69c71b03c8cad46b805d3caf7db12a0eb9ff073f53c1c94cebfd70a9909b8d806f543c66e1ecd7f3c3d3d344a688bacf8bdf6d2f3f5
|
7
|
+
data.tar.gz: 0b4459b6441c79cb3768fa769271ccb7661f458cf4f69b75562a4fc92ebfa2e28502bf294102689112b399cf97938c25ee703775444132f39c2a38e6d402bfa4
|
data/README.md
CHANGED
@@ -46,6 +46,9 @@ DataKeeper.storage = DataKeeper::LocalStorage.new(
|
|
46
46
|
There's also support for storing the dumps in s3, using `DataKeeper::S3Storage` like in this example:
|
47
47
|
|
48
48
|
```ruby
|
49
|
+
# Explicit require is necessary
|
50
|
+
require 'data_keeper/s3_storage'
|
51
|
+
|
49
52
|
DataKeeper.storage = DataKeeper::S3Storage.new(
|
50
53
|
bucket: 'bucket-name',
|
51
54
|
store_dir: 'dumps/',
|
@@ -26,21 +26,19 @@ module DataKeeper
|
|
26
26
|
end
|
27
27
|
|
28
28
|
class DefinitionBuilder
|
29
|
-
|
29
|
+
def initialize(type, definition_block)
|
30
|
+
raise InvalidDumpType, "Invalid type! use :partial or :full" unless [:partial, :full].include?(type)
|
30
31
|
|
31
|
-
|
32
|
+
@type = type
|
32
33
|
@tables = []
|
33
34
|
@raw_sqls = {}
|
34
|
-
|
35
|
+
@definition_block = definition_block
|
35
36
|
end
|
36
37
|
|
37
|
-
def
|
38
|
-
|
39
|
-
raise InvalidDumpType, "Invalid type! use :partial or :full" unless [:partial, :full].include?(type)
|
40
|
-
|
41
|
-
builder = new(block)
|
38
|
+
def evaluate!
|
39
|
+
instance_eval(&@definition_block) if @definition_block
|
42
40
|
|
43
|
-
Definition.new(type,
|
41
|
+
Definition.new(@type, @tables, @raw_sqls, @on_after_load_block)
|
44
42
|
end
|
45
43
|
|
46
44
|
def table(name)
|
data/lib/data_keeper/dumper.rb
CHANGED
@@ -35,7 +35,7 @@ module DataKeeper
|
|
35
35
|
output_path: file.path
|
36
36
|
)
|
37
37
|
|
38
|
-
yield file, "#{filename}.dump"
|
38
|
+
yield File.open(file.path), "#{filename}.dump"
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -51,7 +51,7 @@ module DataKeeper
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
yield file, "#{filename}.tar.gz"
|
54
|
+
yield File.open(file.path), "#{filename}.tar.gz"
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
data/lib/data_keeper/loader.rb
CHANGED
@@ -7,6 +7,9 @@ module DataKeeper
|
|
7
7
|
def initialize(dump, file)
|
8
8
|
@dump = dump
|
9
9
|
@file = file
|
10
|
+
@psql_version = Terrapin::CommandLine.new('psql', '--version').run
|
11
|
+
.match(/[0-9]{1,}\.[0-9]{1,}/)
|
12
|
+
.to_s.to_f
|
10
13
|
end
|
11
14
|
|
12
15
|
def load!
|
@@ -24,6 +27,8 @@ module DataKeeper
|
|
24
27
|
private
|
25
28
|
|
26
29
|
def load_full_database!
|
30
|
+
ensure_schema_compatibility!
|
31
|
+
|
27
32
|
pg_restore = Terrapin::CommandLine.new(
|
28
33
|
'pg_restore',
|
29
34
|
"#{connection_args} -j 4 --no-owner --dbname #{database} #{@file.path} 2>/dev/null",
|
@@ -52,9 +57,11 @@ module DataKeeper
|
|
52
57
|
|
53
58
|
def load_partial_database!
|
54
59
|
inflate(@file.path) do |schema_path, tables_path, sql_files|
|
60
|
+
ensure_schema_compatibility!
|
61
|
+
|
55
62
|
pg_restore = Terrapin::CommandLine.new(
|
56
63
|
'pg_restore',
|
57
|
-
"#{connection_args} -j 4 --no-owner --dbname
|
64
|
+
"#{connection_args} -j 4 --no-owner --dbname :database #{schema_path} 2>/dev/null",
|
58
65
|
environment: psql_env
|
59
66
|
)
|
60
67
|
|
@@ -66,7 +73,7 @@ module DataKeeper
|
|
66
73
|
|
67
74
|
pg_restore = Terrapin::CommandLine.new(
|
68
75
|
'pg_restore',
|
69
|
-
"#{connection_args} -
|
76
|
+
"#{connection_args} --data-only -j 4 --no-owner --disable-triggers --dbname :database #{tables_path} 2>/dev/null",
|
70
77
|
environment: psql_env
|
71
78
|
)
|
72
79
|
|
@@ -88,7 +95,7 @@ module DataKeeper
|
|
88
95
|
host: host,
|
89
96
|
port: port,
|
90
97
|
csv_path: csv_path,
|
91
|
-
command: "COPY #{table} FROM stdin DELIMITER ',' CSV HEADER"
|
98
|
+
command: "ALTER TABLE #{table} DISABLE TRIGGER all; COPY #{table} FROM stdin DELIMITER ',' CSV HEADER"
|
92
99
|
)
|
93
100
|
end
|
94
101
|
|
@@ -96,6 +103,20 @@ module DataKeeper
|
|
96
103
|
end
|
97
104
|
end
|
98
105
|
|
106
|
+
def ensure_schema_compatibility!
|
107
|
+
cmd = Terrapin::CommandLine.new(
|
108
|
+
'psql',
|
109
|
+
"#{connection_args} -d :database -c :command",
|
110
|
+
environment: psql_env
|
111
|
+
)
|
112
|
+
|
113
|
+
if @psql_version >= 11.0
|
114
|
+
cmd.run(database: database, host: host, port: port, command: "drop schema if exists public")
|
115
|
+
else
|
116
|
+
cmd.run(database: database, host: host, port: port, command: "create schema if not exists public")
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
99
120
|
class InflatedFiles
|
100
121
|
attr_reader :errors
|
101
122
|
|
data/lib/data_keeper/version.rb
CHANGED
data/lib/data_keeper.rb
CHANGED
@@ -15,18 +15,20 @@ module DataKeeper
|
|
15
15
|
DumpDoesNotExist = Class.new(Error)
|
16
16
|
NoStorageDefined = Class.new(Error)
|
17
17
|
|
18
|
-
@
|
18
|
+
@dump_definition_builders = {}
|
19
19
|
@storage = nil
|
20
20
|
|
21
21
|
def self.define_dump(name, type = :partial, &block)
|
22
|
-
@
|
22
|
+
@dump_definition_builders[name.to_sym] = DefinitionBuilder.new(type, block)
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.create_dump!(name)
|
26
26
|
raise DumpDoesNotExist unless dump?(name)
|
27
27
|
raise NoStorageDefined if @storage.nil?
|
28
28
|
|
29
|
-
|
29
|
+
definition = @dump_definition_builders[name.to_sym].evaluate!
|
30
|
+
|
31
|
+
Dumper.new(name, definition).run! do |file, filename|
|
30
32
|
@storage.save(file, filename, name)
|
31
33
|
end
|
32
34
|
end
|
@@ -34,9 +36,10 @@ module DataKeeper
|
|
34
36
|
def self.fetch_and_load_dump!(name)
|
35
37
|
raise DumpDoesNotExist unless dump?(name)
|
36
38
|
raise NoStorageDefined if @storage.nil?
|
39
|
+
definition = @dump_definition_builders[name.to_sym].evaluate!
|
37
40
|
|
38
41
|
@storage.retrieve(name) do |file|
|
39
|
-
Loader.new(
|
42
|
+
Loader.new(definition, file).load!
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
@@ -44,11 +47,12 @@ module DataKeeper
|
|
44
47
|
raise DumpDoesNotExist unless File.file?(path)
|
45
48
|
raise NoStorageDefined if @storage.nil?
|
46
49
|
|
47
|
-
|
50
|
+
definition = @dump_definition_builders[name.to_sym].evaluate!
|
51
|
+
Loader.new(definition, File.open(path)).load!
|
48
52
|
end
|
49
53
|
|
50
54
|
def self.dump?(name)
|
51
|
-
@
|
55
|
+
@dump_definition_builders.key?(name.to_sym)
|
52
56
|
end
|
53
57
|
|
54
58
|
def self.storage=(value)
|
@@ -56,6 +60,6 @@ module DataKeeper
|
|
56
60
|
end
|
57
61
|
|
58
62
|
def self.clear_dumps!
|
59
|
-
@
|
63
|
+
@dump_definition_builders = {}
|
60
64
|
end
|
61
65
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: data_keeper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roger Campos
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|
118
|
-
rubygems_version: 3.
|
118
|
+
rubygems_version: 3.1.6
|
119
119
|
signing_key:
|
120
120
|
specification_version: 4
|
121
121
|
summary: Easy management of database dumps for dev env
|