ruby-on-rails - 如何将字符串列更改为 bigint?

标签 ruby-on-rails ruby-on-rails-3 postgresql heroku migration

在 rails 迁移中。如何将字符串类型的列更改为 bigint?

我有:

t.change :ip_number_from, :integer, :limit => 8

我得到:

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

编辑:以下是您可以在迁移中直接在 SQL 中执行此操作的方法:

execute <<-SQL
  ALTER TABLE ip_to_countries
  ALTER COLUMN ip_number_from TYPE bigint USING ip_number_from::bigint
SQL

关于ruby-on-rails - 如何将字符串列更改为 bigint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380399/

相关文章:

ruby-on-rails - 在 Rails 3.1 中,如何创建使用 block 样式格式的 HTML 表格生成器

ruby-on-rails-3 - 如何将`:include`添加到default_scope?

postgresql - 当 .sql 文件是 ANSI 时,pg_dump 是否保留所有 Unicode 字符?

ruby-on-rails - 目标方法的名称是否在 before_filter 中可用

ruby-on-rails - ruby 无法在 .js.coffee 中的 coffeescript 之后进行 ajax 响应

ruby-on-rails - 如何从 Rails 模型中删除列?

ruby-on-rails - 在Rails(ActiveRecord)中找到第一条记录的最快方法是什么?

ruby-on-rails - 了解 Rails 路线 : match vs root in routes. rb

javascript - FindOne 函数无法与 Postgres 一起使用

sql - 调试 PostgreSQL sql 查询