[Миграции баз данных SQLite] Оцените, пожалуйста, сложность задачи
Зависит насколько схема старой БД отличает от схемы новой БД.
Если различия небольшие, то можно частично сделать ddl скриптами, частично dml.
Если различия больше, то проще перепилить старую в новую.
Естественно, еще важен размер базы, и сколько времени отводится на выполнение миграции. Если там терабайты, и простой должен быть в несколько минут, то всё гораздо интереснее.
Специфики SQLite не знаю.
Если различия небольшие, то можно частично сделать ddl скриптами, частично dml.
Если различия больше, то проще перепилить старую в новую.
Естественно, еще важен размер базы, и сколько времени отводится на выполнение миграции. Если там терабайты, и простой должен быть в несколько минут, то всё гораздо интереснее.
Специфики SQLite не знаю.
Спасибо за ответ!
База данных небольшая, объемом около 50 Мб, таблиц, не являющихся связями, около 20-ти
А что означает выражение "перепилить старую [базу данных] в новую"? Данные ведь нужно где-то сохранить.
База данных небольшая, объемом около 50 Мб, таблиц, не являющихся связями, около 20-ти
А что означает выражение "перепилить старую [базу данных] в новую"? Данные ведь нужно где-то сохранить.
База на мобильных устройствах?
Да, база данных мобильного приложения.
Посмотрел, в SQLite даже нельзя переименовать или удалить поле в таблице напрямую (http://www.sqlite.org/lang_altertable.html)
Посмотрел, в SQLite даже нельзя переименовать или удалить поле в таблице напрямую (http://www.sqlite.org/lang_altertable.html)

Посмотрел, в SQLite даже нельзя переименовать или удалить поле в таблице напрямую (http://www.sqlite.org/lang_altertable.html)Создай новую таблицу селектом из старой.![]()
Да, так можно, но сложность значительно выше. Пример из интернета:
Была таблица: CREATE TABLE team(Name TEXT, Coach TEXT, City TEXT);
Переименование поля City --> Location:
(1) ALTER TABLE team RENAME TO team_orig;
(2) CREATE TABLE team(Name TEXT, Coach TEXT, Location TEXT);
(3) INSERT INTO team(Name, Coach, Location) SELECT Name, Coach, City FROM team_orig;
(4) DROP TABLE team_orig;
Была таблица: CREATE TABLE team(Name TEXT, Coach TEXT, City TEXT);
Переименование поля City --> Location:
(1) ALTER TABLE team RENAME TO team_orig;
(2) CREATE TABLE team(Name TEXT, Coach TEXT, Location TEXT);
(3) INSERT INTO team(Name, Coach, Location) SELECT Name, Coach, City FROM team_orig;
(4) DROP TABLE team_orig;
Если используются констрейнты и FK, то будет несколько веселее.
Пока задача про сферического коня.
Тот же sqlite на время переноса можно значительно ускорить, если отказаться от потверждения записи на диск.
Пока задача про сферического коня.
Тот же sqlite на время переноса можно значительно ускорить, если отказаться от потверждения записи на диск.
Да, так можно, но сложность значительно выше.В чём сложность то? Больше строк написать? Для однократной миграции не велика разница 1 или 4 строки написать. Если ты там каждый день мигрируешь, то
База данных небольшая, объемом около 50 Мб, таблиц, не являющихся связями, около 20-тиэто типа теперь называется миграция бд?
Оставить комментарий
nikola1956
Раньше, к сожалению, никогда не сталкивался с задачей о миграциях баз данных. Поделитесь, пожалуйста, опытом, насколько сложная эта задача? Легко ли писать sql-скрипты для произвольных изменений в базе данных, которые должны происходить без потери данных? Имею в виду переименование таблиц, полей, удаление полей, изменение связей между таблицами и т.п.Или все это настолько сложно и неудобно, что категорически рекомендуется предварительно сохранить данные в облаке (на каком-то сервере а потом их заново загрузить в пересозданную базу данных?