我有两个具有相同结构的数据库。这些表有一个整数作为Rails中使用的主键。合并Rails数据库
如果我有一个患者表,我将有一个患者在一个数据库中使用主键123,另一个患者在另一个数据库中使用相同的主键。
对于合并来自两个数据库的数据,您有什么建议?
我有两个具有相同结构的数据库。这些表有一个整数作为Rails中使用的主键。合并Rails数据库
如果我有一个患者表,我将有一个患者在一个数据库中使用主键123,另一个患者在另一个数据库中使用相同的主键。
对于合并来自两个数据库的数据,您有什么建议?
用config/database.yml中的条目设置两个数据库,然后生成新的迁移。根据记录的数量和模型之间的关联
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
因人而异:
使用ActiveRecord :: Base.establish_connection两个数据库之间的这样的迁移切换。
顺便说一句,这可能是更有意义的,这是一个耙子或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
如果您有记录很多,您可能需要部分这一点莫名其妙......这样做在10k或东西群体。
您使用的是什么数据库引擎?另外(我没有太多的Rails经验),Rails是否将新记录的id分配给数据库引擎还是数据库引擎执行它? – Neall 2008-10-03 23:55:40
在Rails中,数据库使用序列或自动增量整数字段类型来分配ID。 – hectorsq 2008-10-04 00:03:55