是否可以将字符串的字段更改为整数而不清除已输入的数据?
有问题的表的当前db结构是:
create_table :people do |t|
t.string :company_id
这是否可以使用迁移?
我想也许在迁移中删除旧字段,创建一个整数的新字段 - 但我担心这会清除已经输入的所有数据。
谢谢,
丹尼
答案 0 :(得分:40)
不要删除该列,请使用此
.square-cut{
font-size: 0px; line-height: 0%; width: 0px;
border-top: 20px solid purple;
border-bottom: 20px solid purple;
border-right: 40px solid white;
}
"提示"你从PostgreSQL得到的基本上告诉你,你需要确认你是否希望这种情况发生,以及如何转换数据。要确认更改,请在迁移中使用上面的块
答案 1 :(得分:32)
不要删除列,它会清除数据。
但你可以尝试
change_column :people, :company_id, :integer
如果company_id
中的所有值都可以转换为integer
,那么应该没问题。
如果不是这种情况(即默认情况下并非所有字符串都可以转换),那么您可以分两步完成:1)创建一个新列,然后在一些转换后加载company_id
。 2)删除company_id,然后重命名新列。
你应该小心使用这两种方法(对于第二种方法更是如此),如果可以的话,你应该首先在数据库的副本上进行。
答案 2 :(得分:26)
其他答案是正确的,但您可以使用:using
关键字更进一步:
change_column :people, :company_id, :integer, using: 'company_id::integer'