database_sanitizer 0.0.16 → 0.0.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/database_sanitizer.rb +39 -10
- data/lib/database_sanitizer/transformers.rb +1 -1
- data/lib/database_sanitizer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7e20ead716dbb042a748667237ab61e735e9ed3
|
4
|
+
data.tar.gz: abb7e002cb6798d6ede4d36d8a3a7770d211fd7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b980baff161186f7550d8ba0af19a67e81d71473f8f18f5516f52384db95f05c200f16c6ed9f4e1f952f73b1cf767c4ed89d29137b66823e7a1cd74e9a32fd48
|
7
|
+
data.tar.gz: c96d6cda1dbe0b75e33a1cb67d18b4d4b24fafc1c31173e43092c709ef0626cfbe7bb446859959a3272f82d0802de29433088883dfd40b36bb3c68f8facb51b4
|
data/lib/database_sanitizer.rb
CHANGED
@@ -59,23 +59,29 @@ module DatabaseSanitizer
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def export opts={}
|
62
|
-
src = Source.connection
|
63
|
-
dest = Destination.connection
|
64
62
|
duplicate_schema opts[:schema]
|
65
|
-
tables = (opts[:tables] ||
|
63
|
+
tables = (opts[:tables] || Source.connection.tables.collect(&:to_s)) - (opts[:exclude] || [])
|
66
64
|
transformers = read_comments tables
|
67
65
|
max_tbl_name_len = transformers.keys.map(&:length).sort.last || 0
|
68
66
|
|
69
67
|
tables.with_progress('Exporting').each do |table|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
export_table table, transformers, max_tbl_name_len
|
69
|
+
end
|
70
|
+
|
71
|
+
update_sequences
|
72
|
+
end
|
73
|
+
|
74
|
+
def export_table table, transformers, max_tbl_name_len
|
75
|
+
q_table = Destination.connection.quote_table_name table
|
76
|
+
s_table = table.to_sym
|
77
|
+
order_column = order_column_for s_table
|
78
|
+
last_value = nil
|
74
79
|
|
75
|
-
|
80
|
+
suspend_triggers table do
|
81
|
+
get_chunks(Source.connection, table).times_with_progress(table.rjust max_tbl_name_len) do |chunk_i|
|
76
82
|
offset = chunk_i * CHUNK_SIZE
|
77
|
-
result =
|
78
|
-
|
83
|
+
result = Source.connection.exec_query select_query q_table, order_column, last_value, offset
|
84
|
+
Destination.connection.execute insert_query q_table, s_table, transformers, result, offset
|
79
85
|
|
80
86
|
last_value = result.last[order_column] if result.any?
|
81
87
|
end
|
@@ -117,5 +123,28 @@ module DatabaseSanitizer
|
|
117
123
|
nil
|
118
124
|
end
|
119
125
|
end
|
126
|
+
|
127
|
+
def suspend_triggers table
|
128
|
+
Destination.connection.execute "ALTER TABLE #{table} DISABLE TRIGGER ALL"
|
129
|
+
yield
|
130
|
+
Destination.connection.execute "ALTER TABLE #{table} ENABLE TRIGGER ALL"
|
131
|
+
end
|
132
|
+
|
133
|
+
def update_sequences
|
134
|
+
sequences = Source.connection.exec_query <<-SQL.strip_heredoc
|
135
|
+
SELECT s.relname, a.attname, t.relname
|
136
|
+
FROM pg_class s
|
137
|
+
JOIN pg_depend d ON d.objid = s.oid
|
138
|
+
JOIN pg_class t ON d.objid = s.oid AND d.refobjid = t.oid
|
139
|
+
JOIN pg_attribute a ON (d.refobjid, d.refobjsubid) = (a.attrelid, a.attnum)
|
140
|
+
JOIN pg_namespace n ON n.oid = s.relnamespace
|
141
|
+
WHERE s.relkind = 'S'
|
142
|
+
AND n.nspname = 'public'
|
143
|
+
SQL
|
144
|
+
|
145
|
+
sequences.rows.each do |row|
|
146
|
+
Destination.connection.execute "SELECT setval('#{row[0]}', (SELECT MAX(#{row[1]}) FROM #{row[2]}))"
|
147
|
+
end
|
148
|
+
end
|
120
149
|
end
|
121
150
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module DatabaseSanitizer
|
2
2
|
Transformers = {
|
3
|
-
'email' => ->(i, rec) { "email#{i.to_s.rjust(5, ?0)}@#{rec.split(?@)[1]}"},
|
3
|
+
'email' => ->(i, rec) { rec.nil? ? rec : "email#{i.to_s.rjust(5, ?0)}@#{rec.split(?@)[1]}" },
|
4
4
|
'wipe' => proc { nil },
|
5
5
|
'zero' => proc { 0 },
|
6
6
|
'empty_string' => proc { '' },
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: database_sanitizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marton Somogyi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|