File tree Expand file tree Collapse file tree 2 files changed +45
-13
lines changed Expand file tree Collapse file tree 2 files changed +45
-13
lines changed Original file line number Diff line number Diff line change @@ -185,20 +185,22 @@ def read_table(table, rows_count)
185185
186186 columns = Marshal . load ( entry )
187187 columns_sql = columns_insert_sql ( columns )
188- Progress . start ( table , rows_count ) do
189- until entry . eof?
190- rows_sql = [ ]
191- 1000 . times do
192- rows_sql << values_insert_sql ( Marshal . load ( entry ) ) unless entry . eof?
193- end
188+ with_disabled_indexes table do
189+ Progress . start ( table , rows_count ) do
190+ until entry . eof?
191+ rows_sql = [ ]
192+ 1000 . times do
193+ rows_sql << values_insert_sql ( Marshal . load ( entry ) ) unless entry . eof?
194+ end
194195
195- begin
196- insert_into_table ( table_sql , columns_sql , rows_sql )
197- Progress . step ( rows_sql . length )
198- rescue
199- rows_sql . each do |row_sql |
200- insert_into_table ( table_sql , columns_sql , row_sql )
201- Progress . step
196+ begin
197+ insert_into_table ( table_sql , columns_sql , rows_sql )
198+ Progress . step ( rows_sql . length )
199+ rescue
200+ rows_sql . each do |row_sql |
201+ insert_into_table ( table_sql , columns_sql , row_sql )
202+ Progress . step
203+ end
202204 end
203205 end
204206 end
Original file line number Diff line number Diff line change @@ -28,6 +28,36 @@ def clear_table(table_sql)
2828 ActiveRecord ::Base . connection . delete ( "DELETE FROM #{ table_sql } " , 'Clearing table' )
2929 end
3030
31+ def with_disabled_indexes ( table , &block )
32+ all_indexes = ActiveRecord ::Base . connection . indexes ( table )
33+ table_indexes = all_indexes . keep_if { |index | index . table == table }
34+
35+ remove_indexes ( table_indexes )
36+ block . call
37+ add_indexes ( table_indexes )
38+ end
39+
40+ def remove_indexes ( indexes )
41+ indexes . each do |index |
42+ ActiveRecord ::Base . connection . remove_index index . table , :name => index . name
43+ end
44+ end
45+
46+ def add_indexes ( indexes )
47+ indexes . each do |index |
48+ options = {
49+ :name => index . name ,
50+ :unique => index . unique ,
51+ :length => index . lengths ,
52+ :order => index . orders ,
53+ :where => index . where ,
54+ :type => index . type ,
55+ :using => index . using
56+ }
57+ ActiveRecord ::Base . connection . add_index index . table , index . columns , options
58+ end
59+ end
60+
3161 def insert_into_table ( table_sql , columns_sql , values_sql )
3262 values_sql = values_sql . join ( ',' ) if values_sql . is_a? ( Array )
3363 ActiveRecord ::Base . connection . insert ( "INSERT INTO #{ table_sql } #{ columns_sql } VALUES #{ values_sql } " , 'Loading dump' )
You can’t perform that action at this time.
0 commit comments