Как перенести существующие данные, управляемые с помощью sqeryl? - PullRequest
2 голосов
/ 09 марта 2012

Мой небольшой проект, который достиг своего релиза, основан на squeryl - типизированной среде реляционных баз данных для Scala (язык на основе JVM).

Я предвижу несколько обновлений после первоначального развертывания.Данные, введенные в базу данных, должны быть сохранены над ними.Это невозможно без какой-либо процедуры переноса данных, обновления данных для более новой схемы БД.Использование старых данных для тестирования нового кода также требует исправлений совместимости.

Теперь я использую автоматическую генерацию схемы на платформе.Кажется, что он может создавать схему только с нуля - данные не сохраняются.

Существуют ли методы, которые позволяют легко и формализованно переносить данные в измененную схему без полного отказа от автоматического создания схемы?

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

Как удалить, переименовать, изменить типы столбцов или семантику?

Если создание схемы бесполезно для переноса производственной базы данных, каковы стандартные процедуры для обычного повторного развертывания вручную или по сценарию?

1 Ответ

1 голос
/ 12 марта 2012

Было несколько дискуссий по этому поводу в списке Скверил.Консенсус, как правило, заключается в том, что не существует наилучшей наилучшей практики, которая работает для всех.Автоматизированный процесс обновления вашей схемы на основе вашей модели хрупок (не может справиться с такими ситуациями, как переименование столбцов) и может быть опасным в производственной среде.Лично мне нравится идея «миграций», когда все изменения вашей схемы записываются как SQL.Есть несколько фреймворков, которые помогают с этим, и вы можете найти некоторые из них здесь .Лично я просто использую легкую обертку вокруг утилиты командной строки psql, чтобы выполнить миграцию схемы и загрузку данных, поскольку для последних это намного быстрее, чем ввод данных через JDBC.

...