diff --git a/app/jobs/regular/importer.rb b/app/jobs/regular/importer.rb index 9fa0373c397..458dc670296 100644 --- a/app/jobs/regular/importer.rb +++ b/app/jobs/regular/importer.rb @@ -188,16 +188,22 @@ module Jobs parameter_markers = fields.map {|x| "?"}.join(',') sql_stmt = "INSERT INTO #{table_name} (#{fields.join(',')}) VALUES (#{parameter_markers})" - User.exec_sql("BEGIN TRANSACTION") unless Rails.env.test? - i = 0 - rows.each do |row| - if i % batch_size == 0 && i > 0 - log "#{i} rows done" + in_tran = false + begin + User.exec_sql("BEGIN TRANSACTION") unless Rails.env.test? + in_tran = true + i = 0 + rows.each do |row| + if i % batch_size == 0 && i > 0 + log "#{i} rows done" + end + User.exec_sql(sql_stmt, *row) + i += 1 end - User.exec_sql(sql_stmt, *row) - i += 1 + User.exec_sql("COMMIT") unless Rails.env.test? + rescue + User.exec_sql("ROLLBACK") if in_tran end - User.exec_sql("COMMIT") unless Rails.env.test? true else