Jeśli bazy danych są dokładnie takie same (dane nie wymagają przetwarzania niestandardowy) i nie ma zbyt wiele rekordów, można to zrobić (co pozwala na klucze obce):
Nietestowane .. . Ale masz pomysł
#All models and their foreign keys
tales = {Patients => [:doctor_id, :hospital_id],
Doctors => [:hospital_id],
Hospitals}
ActiveRecord::Base.establish_connection :development
max_id = tables.map do |model|
model.maximum(:id)
end.max + 1000
tables.each do |model, fks|
ActiveRecord::Base.establish_connection :development
records = model.find(:all)
ActiveRecord::Base.establish_connection :production
records.each do |record|
#update the foreign keys
fks.each do |attr|
record[attr] += max_id if not record[attr].nil?
end
record.id += max_id
model.create record.attributes
end
end
Jeśli masz dużo rekordów może trzeba to jakoś części ... to zrobić w grupach 10k czy coś.
Jakiego silnika bazy danych używasz? Również (nie mam zbyt wiele doświadczeń Rails), czy Railsy przypisują identyfikatory do nowych rekordów lub czy silnik bazy danych to robi? – Neall
W Railsach identyfikatory są przypisywane przez bazę danych za pomocą typu pola lub autoinkrementu typu liczba całkowita. – hectorsq