我已经在 google 上搜索了一下,似乎对我的问题没有令人满意的答案。
我有一个包含字符串类型列的表。 我想运行以下迁移:
class ChangeColumnToBoolean < ActiveRecord::Migration
def up
change_column :users, :smoking, :boolean
end
end
当我运行这个时,我收到以下错误
PG::Error: ERROR: column "smoking" cannot be cast automatically to type boolean
HINT: Specify a USING expression to perform the conversion.
: ALTER TABLE "users" ALTER COLUMN "smoking" TYPE boolean
我知道我可以使用纯 SQL 执行此迁移,但如果我可以使用 Rails 来执行此迁移,那就更好了。我浏览了 Rails 代码,似乎没有这种可能性,但也许有人知道一种方法?
我对以下内容不感兴趣: - 纯SQL - 删除列 - 创建另一列,转换数据,删除原始列,然后重命名
最佳答案
如果 smoking
列中的字符串已经是有效的 bool 值,则以下语句将更改列类型而不丢失数据:
change_column :users, :smoking, 'boolean USING CAST(smoking AS boolean)'
类似地,您可以使用此语句将列转换为整数:
change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'
我正在使用 Postgres。不确定此解决方案是否适用于其他数据库。
关于ruby-on-rails - Rails 迁移 - 带有类型转换的change_column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17075173/