【问题标题】:Convert existing DataMapper app data to a different database type将现有 DataMapper 应用程序数据转换为不同的数据库类型
【发布时间】:2014-10-31 15:39:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby datamapper ruby-datamapper


    【解决方案1】:

    这在很大程度上超出了 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2020-05-08
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      相关资源
      最近更新 更多