Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'sequel'
- logger = ::Logger.new('tanga.log')
- oracle_db = Sequel.oracle "//192.168.0.7:1521/xe", user: 'system', password: 'oracle'
- pg_db = Sequel.postgres 'mawidabp_development',
- user: 'docker',
- password: 'docker',
- host: 'localhost',
- port: 5432
- Rails.application.eager_load!
- models = (ApplicationRecord.descendants + [PaperTrail::Version]).flatten.uniq { |m| m.table_name }
- 5.times do |i|
- same = []
- models.each do |model|
- table_name = model.table_name.to_sym
- next if i.zero? && [:versions].include?(table_name)
- logger.info '='*60
- logger.info "Migrating #{table_name}"
- # sqlite_table = sqlite_db[table_name]
- pg_table = if table_name == :co_weakness_template_relations
- pg_db[:control_objective_weakness_template_relations]
- else
- pg_db[table_name]
- end
- oracle_table = if table_name == :control_objective_weakness_template_relations
- model.table_name = :co_weakness_template_relations
- oracle_db[:co_weakness_template_relations]
- else
- oracle_db[table_name]
- end
- columns = model.columns.map(&:name).map(&:to_sym)
- pg_table.each do |row|
- begin
- a = row.slice(*columns).each_with_object({}) do |(k,v), memo|
- memo[k] = v unless v.blank? && k.to_s.match?(/_id$/)
- memo[k] = v.truncate(2000) if v.present? && v.to_s.size > 2000
- end
- # ActiveRecord::Base.connection.execute pg_table.insert_sql(a)
- oracle_table.insert(a)
- rescue => e
- unless e.to_s.match?(/(ORA-02291|ORA-00001)/)
- logger.info "Error: #{e.to_s}"
- byebug
- end
- end
- end
- logger.info "#{table_name} old count: #{pg_table.count} new count: #{oracle_table.count}"
- same << [pg_table.count == oracle_table.count]
- end
- break if same.all?
- logger.info "Retrying everthing again..."
- end
Add Comment
Please, Sign In to add comment