dan*_*mcc 27 database migration string integer ruby-on-rails
是否可以将字符串的字段更改为整数而不清除已输入的数据?
有问题的表的当前db结构是:
create_table :people do |t|
t.string :company_id
Run Code Online (Sandbox Code Playgroud)
这可能是使用迁移吗?
我想也许在迁移中删除旧字段,创建一个整数的新字段 - 但我担心这将清除已经输入的所有数据.
谢谢,
丹尼
use*_*754 46
不要掉落列,使用它
change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'
Run Code Online (Sandbox Code Playgroud)
你从PostgreSQL获得的"提示"基本上告诉你,你需要确认你是否希望这种情况发生,以及如何转换数据.要确认更改,请在迁移中使用上面的块
Joã*_*uza 35
其他答案是正确的,但您可以使用:using
关键字更进一步:
change_column :people, :company_id, :integer, using: 'company_id::integer'
Run Code Online (Sandbox Code Playgroud)
小智 34
不要删除列,它将清除数据.
不过你可以试试
change_column :people, :company_id, :integer
Run Code Online (Sandbox Code Playgroud)
如果所有的值company_id
都可以转换成integer
,那就应该没问题了.
如果不是这种情况(即默认情况下不能转换所有字符串),那么您可以分两步完成:1)创建一个新列,然后company_id
在一些转换后加载到那里.2)删除company_id,然后重命名新列.
您应该小心使用这两种方法(对于第二种方法更是如此),如果可以的话,您应该首先在数据库的副本上执行此操作.