从 MYSQL 到 POSTGRES 的多租户系统迁移

Multi Tenant System MIgration from MYSQL to POSTGRES

我的应用程序的数据库在 MYSQL 中,我正在尝试使用公寓 Gem 实施多租户系统。 gem 的要求是你必须有一个 POSTGRES Db。那么如何将现有的 MYSQL Db 迁移到 POSTGRES。

我最近在我的一个项目中做了这个。将数据从 mysql 迁移到 pg 有点棘手。为此,您必须小心地从所有 rails models 中获取所有 mysql db 记录,对数据进行哈希处理,然后将其导入 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- 切换到您想要 export 数据到

的新 tenant
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,以便 rails 从前面的记录而不是从 1 创建记录。

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

给你。现在您已将所有 mysql 数据迁移到 pg database.