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