在轨道迁移中。如何将字符串类型列更改为 bigint?
I have:
t.change :ip_number_from, :integer, :limit => 8
I get:
PG::Error: ERROR: column "ip_number_from" cannot be cast to type bigint
我什至尝试了两种选择:
change_column :ip_to_countries, :ip_number_from, :integer, :limit => 8
change_column :ip_to_countries, :ip_number_from, :bigint
还是同样的错误。
Postgres 告诉您该列中存在它不知道如何转换的现有数据,因此它需要一个 ALTER 语句,该语句为该列提供 USING 子句以指定如何转换现有值。
不幸的是,您将需要下拉特定于数据库的代码来完成此操作,或者使用类似于此处建议的解决方案的代码:
http://webjazz.blogspot.co.uk/2010/03/how-to-alter-columns-in-postgresql.html http://webjazz.blogspot.co.uk/2010/03/how-to-alter-columns-in-postgresql.html
编辑:以下是您在迁移中直接在 SQL 中执行此操作的方法:
execute <<-SQL
ALTER TABLE ip_to_countries
ALTER COLUMN ip_number_from TYPE bigint USING ip_number_from::bigint
SQL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)