data_keeper 0.1.6 → 0.1.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 281f71c099696e1d51c88dd57e2cd0edf5f028bbbf4340c4457923e3a17b553a
4
- data.tar.gz: 1592db229f9407735630803bff1a97bd85ed051ec30b878029952ffcfb272759
3
+ metadata.gz: c525131692e6a1de920301cbc4b55360fc7dd089ccfc1b1db1068ef328b78e0c
4
+ data.tar.gz: ee646b314fc7203cadab9c366559c060c91ae9a45cea906f4ee4f4409c5bcd76
5
5
  SHA512:
6
- metadata.gz: cf10459525a1cd3f210c6ef926b2b6d87a217505c8d8c8c155e99021d7a8837312fbf0038302987a683bf2a66f335d7507071451eff213ce004536ea42d26ca9
7
- data.tar.gz: 30ff5218bb48851d938b96afba015e9076226b25342171e35ac47b5d78ecc8d8c3308afc2ffd6a94ded725495303da9a65f4394530a63cb193fcf005a90d4952
6
+ metadata.gz: 2b7ae402b492cd31c8d82b0481f0c8088ef09f28d9fb09b37f86040e14c4ce6f1d2b4d2b75dca6f5bf78d18306844ed26657bcfcadfda0c0001523e8fac88534
7
+ data.tar.gz: 38c8bb4d0fcdb05cd43f93f7a0d70f69f33067e2e40dea1c0e8ddc4e6b4910cc7f635e5291059801a5cecade692ca4e714deb841b152b9fe792785c9435408ca
@@ -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
@@ -76,7 +76,9 @@ module DataKeeper
76
76
  end
77
77
 
78
78
  def load_partial_database!
79
- inflate(@file.path) do |schema_path, tables_path, sql_files|
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") do
153
- sql_dumps.size == @dump.sqls.keys.size
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
@@ -1,3 +1,3 @@
1
1
  module DataKeeper
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  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.6
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-09-20 00:00:00.000000000 Z
11
+ date: 2021-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord