2013-11-14 5 views
0

Сейчас я работаю над обновлением приложения Rails, и в базе данных есть некоторые проблемы. Он также преобразуется из MySQL в PostgreSQL.Rails update old database

Для отслеживания одного значения времени используется 3 столбца. Время открытия объекта в понедельник записывается как monday_open_hour, monday_open_minute, monday_open_ampm. Я хотел бы объединить их в одно время.

Существует также несколько полей, используемых только для 1% из 3000+ записей, поэтому я хотел бы разбить их на отдельную таблицу.

Что было бы лучшим способом сделать это? Я предполагаю, что это, вероятно, можно было бы сделать в SQL с помощью каких-то хранимых процедур/курсоров. Есть ли способ сделать это с помощью Ruby/Rails?

ответ

1

Метод Rails для обработки инкрементных изменений базы данных заключается в использовании migrations. Миграции позволяют применять инкрементные изменения к вашей схеме или содержимому базы данных упорядоченным образом, даже когда вы сотрудничаете с командой. Есть хорошие помощники для выполнения общих задач, таких как создание и удаление таблиц, переименование столбцов и простейшие вещи, подобные этому, но если вам нужно это сделать, вы можете отказаться от произвольного SQL (хотя, помните, что это скорее всего привяжет вас к вашей текущей базе данных, и сделать дальнейшие шаги более трудными).

В принципе, вы можете создать новую миграцию с помощью rails generate migration ConsolidateDateColumns (например). Это создаст шаблон для вас в каталоге db/migrate; см. Rails Guides entry, чтобы начать писать. Когда вы будете готовы применить его, запустите rake db:migrate.

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

Еще одна вещь: похоже, что вы будете совершать большие изменения в быстрой последовательности. Перед тем, как начать, убедитесь, что вы берете резервную копию исходной базы данных и тщательно проверяете свою работу с уменьшенным набором тестов в отдельной среде, прежде чем запускать ее против реальной вещи!

+0

Спасибо, что указал мне в правильном направлении. Этот ответ плюс ответ на [Миграция данных в Rails Migration] (http://stackoverflow.com/questions/1885242/migrating-data-in-a-rails-migration) помогли мне начать. – Shaun