2012-05-02 2 views
1

Я использую представления для медленного перехода от старой базы данных к новой. Например, есть таблица клиентов в старой базе данных, которую я повторно внедряю в новой базе данных (обе базы данных находятся на одном сервере). Я планирую заменить таблицу клиента на представление клиента в старой базе данных, которая имеет ту же подпись, что и исходная таблица.Динамические представления, основанные на переменной

Я думаю, что моя идея должна работать нормально, за исключением того, что новое приложение разрабатывается в Rails, и в зависимости от среды имя базы данных может быть db_test, db_development или db_production.

Как создать представление в старой базе данных, которое указывает на таблицу в новой базе данных при изменении нового имени базы данных? Я пробовал несколько вещей, но это довольно странная проблема, поэтому я даже не знаю, с чего начать.

Это пример того, что я хотел бы быть в состоянии сделать:

SET @db = 'db_development'; 
select * from @db.client; 

Если кто-то может мне точку в правильном направлении, это было бы весьма признателен. Спасибо.

+0

Когда вы говорите «в зависимости от окружающей среды», вы имеете в виду «в зависимости от состояния программы в Ruby»? В этом случае, конечно, вы можете сделать выбор базы данных (например, при подключении к MySQL)? – eggyal

+0

Ну, новое приложение Rails является лишь частью уравнения. У устаревшей базы данных будут представления, указывающие на новую базу данных Rails, поскольку устаревшее приложение будет работать совместно с приложением Rails в течение некоторого времени. База данных, на которую указывают эти точки зрения, должна измениться вместе с средой Rails. – kstevens715

+0

Я рассматривал использование символических ссылок, но это работает только с таблицами MyIASM. Я посмотрел на использование MySQL Proxy, но он выглядит слишком сложным для этой ситуации. Я посмотрел на использование переменных, но это работает только с подготовленными операторами, которые не работают в представлениях. Я думаю, что я попытаюсь создать отдельный камень, который может обрабатывать файлы sql.erb. Тогда я могу запустить что-то вроде 'rake db: switch development' и обновить представления, чтобы указать на другой db. – kstevens715

ответ

1

Вы можете определить триггеры для обеих баз данных, чтобы синхронизировать их.

Смежные вопросы