你可能会得到'true'
和'false'
:
psql> create table t (c boolean not null);
psql> insert into t (c) values (TRUE), (FALSE);
psql> alter table t alter column c type text;
psql> select * from t;
c
-------
true
false
我不知道是否有保证,我找不到什么是布尔文本投不这样你可能要一个权威的参考检查一下这些在你的版本的PostgreSQL说:
psql> select TRUE::text;
psql> select FALSE::text;
如果你想保证'True'
和'False'
,那么你可以使用USING手动指定转换:
可选USING
子句指定如何从旧计算新列值;如果省略,则默认转换与从旧数据类型到新转换的赋值相同。
所以,你可以说这给力的问题:,
alter table t
alter column c type text
using case c when TRUE then 'True' when FALSE then 'False' else NULL end
如果让Rails的做一个标准的迁移转化,那么你将得到默认的布尔到文本蒙上如果您使用SQL ALTER TABLE手动更改类型,然后可以控制发生的情况。你可以做任何一个迁移内部:
def up
change_column :t, :c, :text
end
与
def up
connection.execute(%q{
alter table ...
})
end
顺便说一句,我不得不质疑放弃为文本列布尔列的逻辑,似乎有点倒退到我。
这是一个生产数据库? –
没有它的开发数据库 – banditKing