У меня две базы данных с одинаковой структурой. Таблицы имеют целое число в качестве первичного ключа, как это используется в Rails.
Если у меня есть таблица пациентов, у меня будет один пациент, использующий первичный ключ 123 в одной базе данных, а другой пациент, использующий тот же первичный ключ в другой базе данных.
Что бы вы посоветовали объединить данные из обеих баз данных?
В Rails идентификаторы назначаются базой данных с использованием целочисленного типа поля типа последовательность или автоинкремента.





Настройте обе базы данных с помощью записей в config / database.yml, затем сгенерируйте новую миграцию.
Используйте ActiveRecord :: Base.establish_connection для переключения между двумя базами данных при миграции следующим образом:
def self.up
ActiveRecord::Base.establish_connection :development
patients = Patient.find(:all)
ActiveRecord::Base.establish_connection :production
patients.each { |patient| Patient.create patient.attributes.except("id") }
end
YMMV в зависимости от количества записей и связей между моделями.
Я столкнулся с проблемой, когда я переключил базу данных с разработки на производство, а затем обновились записи о переменной пациента. например, у меня 10 пользователей в разработке и 3 в производстве, когда я переключил базу данных, переменная пациентов преобразовалась с 10 пользователей в 3. Не могли бы вы помочь. :)
Кстати, для этого, вероятно, имеет больше смысла быть граблями или задачей capistrano, чем миграцией.
Если ваши базы данных точно такие же (данные не требуют специальной обработки) и записей не так много, вы можете сделать это (что позволяет использовать внешние ключи):
Непроверенный ... Но идею вы поняли
#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
Если у вас МНОГО записей, возможно, вам придется как-то разделить их ... делайте это группами по 10 тысяч или что-то в этом роде.
Какой движок базы данных вы используете? Кроме того (у меня мало опыта работы с Rails), назначает ли Rails идентификаторы для новых записей или это делает механизм базы данных?