无法避免“ ActiveRecord :: StatementInvalid:PG :: DatatypeMismatch:错误:列“ gender”的默认值无法自动转换为整数类型”

时间:2019-02-17 12:34:49

标签: ruby-on-rails postgresql

我正在尝试在Rails应用中将“性别”列更改为整数。据说在使用postgresql时,我们必须写一些不同的方法。即

change_column :users, :gender, :integer, using: 'gender::integer'

change_column :users, :gender, 'integer USING CAST(gender AS integer)'

但是,在我的情况下,以上仍然无法正常工作,并出现以下错误。

PG::DatatypeMismatch: ERROR:  default for column "gender" cannot be cast automatically to type integer
: ALTER TABLE "users" ALTER COLUMN "gender" TYPE integer USING gender::integer

请告诉我为什么它不起作用。还是我有一些奇怪的东西?例如错字。

我的环境

  • Ruby:2.5.0
  • 路轨:5.1.6
  • Postgres:11.1

1 个答案:

答案 0 :(得分:1)

基于您看到的错误消息,Postgres不知道在将数据库类型更改为整数时如何保留您设置的默认值。我建议:

  1. 删除默认值
  2. 更改列上的数据类型
  3. 在新类型中添加默认值

您可以在同一呼叫中执行步骤2和3。您将需要在向上迁移中使用类似以下的内容:

def up
  execute "ALTER TABLE users ALTER gender DROP DEFAULT;"
  change_column :users, :gender, :integer, using: 'gender::integer', default: 0
end