data_keeper 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/data_keeper/dumper.rb +40 -0
- data/lib/data_keeper/loader.rb +23 -5
- data/lib/data_keeper/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c525131692e6a1de920301cbc4b55360fc7dd089ccfc1b1db1068ef328b78e0c
|
4
|
+
data.tar.gz: ee646b314fc7203cadab9c366559c060c91ae9a45cea906f4ee4f4409c5bcd76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b7ae402b492cd31c8d82b0481f0c8088ef09f28d9fb09b37f86040e14c4ce6f1d2b4d2b75dca6f5bf78d18306844ed26657bcfcadfda0c0001523e8fac88534
|
7
|
+
data.tar.gz: 38c8bb4d0fcdb05cd43f93f7a0d70f69f33067e2e40dea1c0e8ddc4e6b4910cc7f635e5291059801a5cecade692ca4e714deb841b152b9fe792785c9435408ca
|
data/lib/data_keeper/dumper.rb
CHANGED
@@ -48,6 +48,7 @@ module DataKeeper
|
|
48
48
|
dump_schema(tar)
|
49
49
|
dump_partial_tables(tar)
|
50
50
|
dump_sqls(tar)
|
51
|
+
dump_sequences(tar)
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
@@ -136,8 +137,47 @@ module DataKeeper
|
|
136
137
|
end
|
137
138
|
end
|
138
139
|
|
140
|
+
def dump_sequences(tar)
|
141
|
+
Tempfile.create do |sequences_dump_file|
|
142
|
+
sequences_dump_file.binmode
|
143
|
+
|
144
|
+
sequences_args = all_sequences_to_export.map { |table| "-t #{table}" }.join(' ')
|
145
|
+
cmd = Terrapin::CommandLine.new(
|
146
|
+
'pg_dump',
|
147
|
+
"#{connection_args} -x -Fc :database #{sequences_args} > :output_path",
|
148
|
+
environment: psql_env
|
149
|
+
)
|
150
|
+
|
151
|
+
cmd.run(database: database, host: host, port: port, output_path: sequences_dump_file.path)
|
152
|
+
|
153
|
+
tar.add_file_simple("sequences.dump", 0644, File.size(sequences_dump_file.path)) do |io|
|
154
|
+
sequences_dump_file.reopen(sequences_dump_file)
|
155
|
+
|
156
|
+
while !sequences_dump_file.eof?
|
157
|
+
io.write(sequences_dump_file.read(2048))
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
139
163
|
def filename
|
140
164
|
"#{@dump_name}-#{Time.now.strftime("%Y%m%d-%H%M")}"
|
141
165
|
end
|
166
|
+
|
167
|
+
def all_sequences_to_export
|
168
|
+
cmd = Terrapin::CommandLine.new(
|
169
|
+
'psql',
|
170
|
+
"#{connection_args} -d :database -c :sql -A -R ',' -t",
|
171
|
+
environment: psql_env
|
172
|
+
)
|
173
|
+
|
174
|
+
sequences = cmd.run(
|
175
|
+
database: database,
|
176
|
+
host: host,
|
177
|
+
port: port,
|
178
|
+
sql: "SELECT sequencename from pg_sequences;"
|
179
|
+
)
|
180
|
+
sequences.split(',').map{|x| x.strip}
|
181
|
+
end
|
142
182
|
end
|
143
183
|
end
|
data/lib/data_keeper/loader.rb
CHANGED
@@ -76,7 +76,9 @@ module DataKeeper
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def load_partial_database!
|
79
|
-
|
79
|
+
ensure_schema_compatibility!
|
80
|
+
|
81
|
+
inflate(@file.path) do |schema_path, tables_path, sql_files, sequences_path|
|
80
82
|
pg_restore = Terrapin::CommandLine.new(
|
81
83
|
'pg_restore',
|
82
84
|
"#{connection_args} -j 4 --no-owner -s --dbname :database #{schema_path}#{log_redirect}",
|
@@ -117,6 +119,18 @@ module DataKeeper
|
|
117
119
|
)
|
118
120
|
end
|
119
121
|
|
122
|
+
pg_restore = Terrapin::CommandLine.new(
|
123
|
+
'pg_restore',
|
124
|
+
"#{connection_args} --data-only -j 4 --no-owner --disable-triggers --dbname :database #{sequences_path}#{log_redirect}",
|
125
|
+
environment: psql_env
|
126
|
+
)
|
127
|
+
|
128
|
+
pg_restore.run(
|
129
|
+
database: database,
|
130
|
+
host: host,
|
131
|
+
port: port
|
132
|
+
)
|
133
|
+
|
120
134
|
set_ar_internal_metadata!
|
121
135
|
end
|
122
136
|
end
|
@@ -149,9 +163,8 @@ module DataKeeper
|
|
149
163
|
|
150
164
|
validate("Schema file is missing") { !!schema_path } &&
|
151
165
|
validate("Tables file is missing") { !!tables_path } &&
|
152
|
-
validate("Not all sql custom dumps are present")
|
153
|
-
|
154
|
-
end
|
166
|
+
validate("Not all sql custom dumps are present") { sql_dumps.size == @dump.sqls.keys.size } &&
|
167
|
+
validate("Sequences file is missing") { !!sequences_path }
|
155
168
|
end
|
156
169
|
|
157
170
|
def schema_path
|
@@ -162,6 +175,10 @@ module DataKeeper
|
|
162
175
|
@tables_path ||= @paths.find { |x| File.basename(x) == "tables.dump" }
|
163
176
|
end
|
164
177
|
|
178
|
+
def sequences_path
|
179
|
+
@sequences_path ||= @paths.find { |x| File.basename(x) == "sequences.dump" }
|
180
|
+
end
|
181
|
+
|
165
182
|
def sql_dumps
|
166
183
|
@sql_dumps ||= @dump.sqls.map do |name, (table, _proc)|
|
167
184
|
path = @paths.find { |x| File.basename(x) == "#{name}.csv" }
|
@@ -191,7 +208,8 @@ module DataKeeper
|
|
191
208
|
yield(
|
192
209
|
inflated_files.schema_path,
|
193
210
|
inflated_files.tables_path,
|
194
|
-
inflated_files.sql_dumps
|
211
|
+
inflated_files.sql_dumps,
|
212
|
+
inflated_files.sequences_path
|
195
213
|
)
|
196
214
|
end
|
197
215
|
end
|
data/lib/data_keeper/version.rb
CHANGED
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.7
|
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-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|