0

我正在尝试更改表列的数据类型。我尝试了两种不同的方法:

def change
    remove_column :users, :permission_level
    add_column :users, :permission_level, :integer
end

def change
    change_column :users, :permission_level, :integer
end

但是,在这两种情况下,我都收到了这个错误:

SQLite3::ConstraintException: FOREIGN KEY constraint failed: DROP TABLE "users"
/home/prios/blog/db/migrate/20170719071633_change_column_permission_level_from_string_to_integer.rb:3:in `change'
ActiveRecord::InvalidForeignKey: SQLite3::ConstraintException: FOREIGN KEY constraint failed: DROP TABLE "users"
/home/prios/blog/db/migrate/20170719071633_change_column_permission_level_from_string_to_integer.rb:3:in `change'
SQLite3::ConstraintException: FOREIGN KEY constraint failed
/home/prios/blog/db/migrate/20170719071633_change_column_permission_level_from_string_to_integer.rb:3:in `change'
Tasks: TOP => db:migrate

似乎 Rails 试图删除表而不是删除/更改其中一列的数据类型,这是我不想要的。

更多信息:我尝试更改/删除的列没有与之关联的任何外键。这是一个我还没用过的专栏。

4

1 回答 1

1

SQLite 不支持 remove_column 迁移方法。来自http://www.sqlitetutorial.net/sqlite-alter-table/

SQLite 不支持 ALTER TABLE DROP COLUMN 语句。

显然,在 SQLite 中,这是一个非常复杂的过程,您可以在其中重命名现有表,创建一个没有要删除的列的新表,复制原始表中的所有日期,然后删除原始表。当我第一次开始时遇到了这个问题,我切换到 Postgres 并且没有回头。

于 2017-07-19T10:17:35.253 回答