1

我正在尝试将列的数据类型从字符串更改为 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,

问题是我不知道如何解决这个问题。非常感谢任何输入!

4

1 回答 1

1

看起来像 SQLite 包装器中的错误。如果您不使用该版本,您可以尝试更新到最新版本

作为一种解决方法,您可以分多个步骤进行迁移:

  1. 创建一个新列
  2. 写入两列
  3. 将旧列的数据回填到新列
  4. 将读取从旧列移动到新列
  5. 停止写入旧列
  6. 删除旧列

这也是一种更安全的方法,因为change_column可能会导致停机和错误您可以在此 gem 描述中阅读更多相关信息

于 2018-11-27T14:49:04.973 回答