я создаю новую таблицу, копирую в нее данные, стираю старую и переименовываю новую таблицу на нужную. Команда копирования данных у меня такая:
database.execSQL("""
INSERT INTO new_Notes (id, text, date)
SELECT id, text, date FROM Notes
""".trimIndent())
Тут у меня вопрос: эта команда работает, только если совпадает количество и типы данных полей таблиц? Добавление нового столбца, например, лучше в конце сделать через ALTER или все же можно тут в запросе использовать разное количество полей? Мне просто интересно, как оно вообще копирует данные и что будет, если порядок и/или количество столбцов будет отличаться.
Вы читали статью по автомиграциям на медиуме и Гугле? Тут вообще ничего сложного в вашем случае.
Автомиграции тут не вариант, у меня слишком много изменений. Меня интересует конкретный вопрос.
Любой sql insert вставляет в поля написанные слева направо то, что даёт селект также слева направо
1. То есть тогда новый столбец лучше через обычный ALTER? 2. А каким образом он обработает ситуацию, если в столбцах окажутся разные типы? Попытается конвертнуть и если не удастся, то крашнет приложение с неудачной миграцией?
Ошибка будет если не сможет вставить. Если новый столбец является required то в него и в селекте можно передать сразу значение или применить вложенный селект, разные варианты есть. Если не обязательное поле то проще оставить его не тронутым, будет без значения до поры до времени.
Понял, спасибо)
В одноименных столбцах не должны быть разные типы. А если так получилось то в селекте же можно сразу функцию конвертации использовать
Я пойду снова перечитывать инфу по SQL лучше) про конвертацию я вообще пока не в курсе. А насчёт " в одноименных столбцах не должны быть разные типы" - может и так, но судя по примеру из мануала - как минимум примитивы вроде int и string он без проблем с помощью insert поменяет.
Обсуждают сегодня