Skip to content

Instantly share code, notes, and snippets.

@mwlang
Created April 23, 2010 19:35
Show Gist options
  • Save mwlang/377053 to your computer and use it in GitHub Desktop.
Save mwlang/377053 to your computer and use it in GitHub Desktop.
def clone_table(src_db, dest_db, table, key_field = nil, filter = nil)
# filter the rows to be cloned
src_ds = src_db[table]
filter.each_pair{|k, v| src_ds = src_ds.filter(k => v)} unless filter.nil?
# truncate if no key_field
unless key_field
puts "truncating #{table}..."
dest_db[table].delete
end
# Set up progress bar
records = src_ds.count
puts "cloning #{records} records for #{table.to_s}"
pbar = ProgressBar.new(table.to_s, records)
# Copy the data
src_ds.each do |values|
dest_db[table].filter(key_field => values[key_field]).delete if key_field
dest_db[table].insert(values)
pbar.inc
end
pbar.finish
puts "Destination now has #{dest_db[table].count} records in #{table}"
src_ds
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment