169 похожих чатов

У меня вопрос по миграции в Room. Для сложных миграций

я создаю новую таблицу, копирую в нее данные, стираю старую и переименовываю новую таблицу на нужную. Команда копирования данных у меня такая:
database.execSQL("""
INSERT INTO new_Notes (id, text, date)
SELECT id, text, date FROM Notes
""".trimIndent())
Тут у меня вопрос: эта команда работает, только если совпадает количество и типы данных полей таблиц? Добавление нового столбца, например, лучше в конце сделать через ALTER или все же можно тут в запросе использовать разное количество полей? Мне просто интересно, как оно вообще копирует данные и что будет, если порядок и/или количество столбцов будет отличаться.

8 ответов

18 просмотров

Вы читали статью по автомиграциям на медиуме и Гугле? Тут вообще ничего сложного в вашем случае.

Viktor- Автор вопроса

Автомиграции тут не вариант, у меня слишком много изменений. Меня интересует конкретный вопрос.

Любой sql insert вставляет в поля написанные слева направо то, что даёт селект также слева направо

Viktor- Автор вопроса

1. То есть тогда новый столбец лучше через обычный ALTER? 2. А каким образом он обработает ситуацию, если в столбцах окажутся разные типы? Попытается конвертнуть и если не удастся, то крашнет приложение с неудачной миграцией?

Ошибка будет если не сможет вставить. Если новый столбец является required то в него и в селекте можно передать сразу значение или применить вложенный селект, разные варианты есть. Если не обязательное поле то проще оставить его не тронутым, будет без значения до поры до времени.

Viktor- Автор вопроса

Понял, спасибо)

В одноименных столбцах не должны быть разные типы. А если так получилось то в селекте же можно сразу функцию конвертации использовать

Viktor- Автор вопроса

Я пойду снова перечитывать инфу по SQL лучше) про конвертацию я вообще пока не в курсе. А насчёт " в одноименных столбцах не должны быть разные типы" - может и так, но судя по примеру из мануала - как минимум примитивы вроде int и string он без проблем с помощью insert поменяет.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта