2016-07-02 3 views
0

Бит моего приложения находится в MYSQL, и я пытаюсь реализовать систему Multi-tenant с использованием Apartment Gem. Требование драгоценного камня заключается в том, что у вас должен быть POSTGRES Db. Итак, как я могу перенести мой существующий MYSQL Db в POSTGRES.MIgration от MYSQL до POSTGRES

+0

Квартира не требует использования Postgres! он поддерживает sqlite, mysql и postgres просто отлично – Nimir

+0

Резервное копирование всего, прежде чем вы начнете. Я бы использовал инструменты для выполнения этой работы. MySQL Workbench - экспорт функций данных и PG Admin III - импорт данных. Читайте о создании базы данных pg с помощью schema.rb. Создайте новую базу данных Postgres с помощью rake db: create - затем импортируйте данные MySQL из вашего дампа с помощью PG Admin III. Это может произойти или не пойти гладко в первый раз. Я не ставил это как ответ, потому что это совет на основе инструментария для преобразования. Используя это, вы можете проверять результаты каждого шага, вместо того, чтобы одновременно смять все вместе. – Elvn

ответ

0

Я недавно сделал это в одном из своих проектов. Миграция данных от mysql до pg немного сложна. Для этого вам придется тщательно получить все записи mysql db со всего rails models, hashify данные, а затем импортировать их в pg. Позволяет разделить всю процедуру в шагах, которые:

1 Установите соединение с mysql db

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

2- Получить mysql строки из всех моделей и hashify

["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 из hashified 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- Теперь вы должны сбросить идентификаторы, записи могут быть созданы рельсами из предыдущей записи, а не с 1.

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

Там вы идете. Теперь у вас есть все ваши данные mysql, перенесенные в ваш pgdatabase.