将现有DataMapper应用程序数据转换为其他数据库类型

时间:2014-09-07 04:06:55

标签: ruby datamapper ruby-datamapper

我有一个使用DataMapper的现有ruby应用程序,我希望转换为不同的数据库类型,保留现有数据并仍然使用DataMapper。对于我的具体情况,我想从带有DataMapper的sqlite3转到使用DataMapper的postgress。我没有看到使用dm-migrations或其他各种dm- *工具来处理这个问题的优雅方法。有人有成功吗?

似乎理想的处理方法是将DataMapper导出为独立于数据库的“数据映射器”格式,然后重新导入到特定类型的数据库......但我找不到任何东西这样做。

我已经单独尝试将sqlite3数据库直接转换为postgress,但DataMapper则不喜欢生成的postgress数据库(不是一个巨大的震撼)。

1 个答案:

答案 0 :(得分:0)

这远远超出了ORM旨在处理的范围。话虽如此,我已经与activerecord做了类似的事情,并且能够提出一些我认为应该有用的东西。 强制性“代码尚未经过测试,使用风险自负”警告

第1步:

创建连接到postgres数据库的第二个数据库连接

第2步(这是烦人的部分):

创建模型的副本并指定新连接。您应该可以使用一些元编程来重新定义模型(它在IRB中使用标准的ruby对象,不确定它是否适用于DM,但它应该):

旧模型:

class Foo
  include DataMapper::Resource
  # properties
end

新模特:

[Foo].each do |klass|
  Object.const_set("#{klass}Pg", Class.new(klass) do 
    def self.default_repository_name
      :name_of_second_database_connection
    end
  end)
end

第3步:

循环模型:

[Foo].each do |klass|
  klass.all.each do |obj|
    Object.const_get("#{klass}Pg").create!(obj.attributes)
  end
end