我试图更改表格列的数据类型。我尝试了两种不同的方法:
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试图删除表而不是删除/更改其中一个列的数据类型,这是我不想要的。
更多信息:我试图更改/删除的列没有任何与之关联的外键。它是我尚未使用过的专栏。
答案 0 :(得分:1)
SQLite不支持remove_column迁移方法。来自http://www.sqlitetutorial.net/sqlite-alter-table/:
SQLite不支持ALTER TABLE DROP COLUMN语句。
显然,在SQLite中这是一个非常复杂的过程,您重命名现有表,创建一个没有要删除的列的新表,从原始表复制所有日期,然后删除原始表。当我第一次开始时,我遇到了这个问题,切换到Postgres并没有回头。