Ошибка несоответствия типов данных Rails ActiveRecord SQlite3 для столбца change_column из строки в текст - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь изменить тип данных столбца со строки на id.Но SQlite3 доставляет мне неприятности.Это единственная строка в моей миграции:

change_column :containers, :title, :text

Когда выполняется миграция, я получаю сообщение об ошибке несоответствия типов данных:

SQLite3::MismatchException: datatype mismatch: INSERT INTO "acontainers" 

Я почти уверен, что это из-заActiveRecord создает временную таблицу с полем id с типом данных INT, в то время как исходная таблица на самом деле имеет тип данных VARCHAR, как можно увидеть здесь:

CREATE TEMPORARY TABLE "acontainers" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,

Проблема в том, что я понятия не имею, как обойти это,Любой вклад приветствуется!

1 Ответ

0 голосов
/ 27 ноября 2018

Похоже на ошибку в оболочке SQLite.Вы можете попробовать обновить его до последней версии, если вы не используете одну

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

  1. Создать новый столбец
  2. Запись в оба столбца
  3. Обратная засыпка данных из старого столбца в новый столбец
  4. Перемещение операций чтения из старого столбца в новый столбец
  5. Прекращение записи встарый столбец
  6. Удалите старый столбец

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...