lea*_*347 2 ruby postgresql ruby-on-rails rails-migrations ruby-on-rails-4
我在Postgres DB表中有一个列是布尔类型.我想将它更改为整数,因为我需要的不仅仅是该列中的true/false.
我还想将所有真值更改为1,将假值更改为2.
这很容易在Rails中完成吗?我试图通过迁移文件和迁移我的数据库来做到这一点.
mu *_*ort 14
是的,您可以通过一次迁移来完成此更改.唯一棘手的部分是需要告诉数据库如何将布尔值转换为整数.
这样做的方法是使用一个USING子句ALTER TABLE来提供映射.原始SQL版本如下所示:
alter table models
alter column c type integer
using case when c then 1 else 2 end
Run Code Online (Sandbox Code Playgroud)
并因此转化为迁移:
def change
change_column :models, :c, :integer, :using => 'case when c then 1 else 2 end'
end
Run Code Online (Sandbox Code Playgroud)
布尔列只能包含TRUE或者FALSE这样简单CASE就足够了.如果您允许NULLs并希望保留它们,那么:
:using => 'case when c is null then null when c then 1 else 2 end'
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.
当然,您必须更新所有代码才能正确使用这些新整数.
| 归档时间: |
|
| 查看次数: |
2521 次 |
| 最近记录: |