我有兩個具有相同結構的數據庫。這些表有一個整數作爲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