Sequel presents the database to you as if it were a nested set of arrays. My script was a bigger and only slightly more elaborate version of the following simple script:
sourcedb = Sequel.open 'postgres://user:pass@x.x.x.x/dbname'
destdb = Sequel.open 'postgres://user:pass@y.y.y.y/dbname'
destdb.transaction do
destdb[:devicemodel].delete
sourcedb[:devicemodel].each do |row|
# perform fixup/conversion here
destdb[:devicemodel] << row
end
# other tables here
end
The neat thing too is if you just want to run some SQL because you know exactly what you
need to do, it's easy, and the results are returned to you in the same way that you can
iterate over:
emails = db["select distinct emailcontact from contact where accountkey in (select
distinct accountkey from contract)"].all
emails.each do |row|
next if row[:emailcontact].nil?
puts row[:emailcontact]
end
For a more thorough introduction I'd read this interview
with Sharon Rosner, the creator of Sequel, discussing why Sequel was born and where
it's a good fit versus other existing ORM tools. For my migration script, it was great,
allowing me to write simple Ruby loops manipulating the data as an array, yet allowing me
to do raw SQL wherever it was easier.