【问题标题】:PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: "M"PG::InvalidTextRepresentation:错误:整数的无效输入语法:“M”
【发布时间】:2013-12-21 03:47:53
【问题描述】:

所以我的用户模型上有一个性别列,它当前是一个字符串,我想将其更改为一个整数,并将男性设为“1”,将女性设为“0”,因为它目前是男性“M”女性“ F”。运行此迁移时:

class ChangeGenderToIntegerOnUser < ActiveRecord::Migration
  def change
    change_column :users, :gender, 'integer USING CAST(gender AS integer)'
  end
end

我收到以下错误:

错误信息:

PG::InvalidTextRepresentation: ERROR:  invalid input syntax for integer: "M"
: ALTER TABLE "users" ALTER COLUMN "gender" TYPE integer USING CAST(gender AS integer)/usr/local/rvm/gems/ruby-2.0.0-p247/gems/activerecord-4.0.0.rc1/lib/active_record/connection_adapters/postgresql/database_statements.rb:128:in `exec'

我应该怎么做才能正确地将性别更改为整数?

提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 psql


    【解决方案1】:

    您需要先将值 M 转换为 1,F 转换为 0,然后更改列类型。

    class ChangeGenderToIntegerOnUser < ActiveRecord::Migration
      def change
        User.where(gender: 'M').update_all(gender: 1)
        User.where(gender: 'F').update_all(gender: 0)
        change_column :users, :gender, 'integer USING CAST(gender AS integer)'
      end
    end
    

    【讨论】:

    • 感谢您的回答。以这种方式在大型数据库上执行此操作是否有效 - 如果没有,是否有更好的方法?
    猜你喜欢
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2013-08-20
    • 2014-03-30
    • 1970-01-01
    • 2014-07-17
    • 2012-12-21
    相关资源
    最近更新 更多