从MYSQL到POSTGRES的多租户系统管理

时间:2016-07-02 07:31:19

标签: mysql ruby ruby-on-rails-4 multi-tenant postgresql-9.3

我的应用程序的数据库是在MYSQL中,我试图使用Apartment Gem实现多租户系统。宝石的要求是你必须有一个POSTGRES Db。所以我如何将现有的MYSQL Db迁移到POSTGRES。

1 个答案:

答案 0 :(得分:0)

我最近在我的一个项目中完成了这项工作。将数据从mysql迁移到pg有点棘手。为此,您必须仔细获取所有mysql db中的所有rails models条记录,对数据进行哈希化,然后将其导入pg。让我们分步整个过程:

1-建立与mysql db

的连接
ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "host", :username => "username", :password => "password", :database => "db_name" )

2-从所有模型中获取mysql行并进行哈希化

["Model1", "Model2", "Model3", "Model4", "Model5"].each do |modal|
    eval("@#{modal.downcase} = #{modal}.all.collect{ |p| p.to_dh }")    
end

3-现在连接到当前的数据库pg

ActiveRecord::Base.establish_connection(:development)

4-切换到要tenant数据

的新export
Apartment::Tenant.switch!('tenant_name')

5-在rails models中创建从pg迁移的来自哈希化mysql数据的记录

["Model1", "Model2", "Model3", "Model4", "Model5"].each do |modal|
    eval("@#{modal.downcase}.each{ |p| #{modal}.create(p[:attributes], :without_protection => true) rescue p[:id]}")
end

6-现在你需要重置ID,这样就可以通过前面记录的轨道而不是1来创建记录。

["Model1", "Model2", "Model3", "Model4", "Model5"].each do |modal|
     ActiveRecord::Base.connection.reset_pk_sequence!(eval("#{modal}.table_name"))
end

你去吧。现在,您已将所有mysql数据迁移到pg database