我正在尝试在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
请告诉我为什么它不起作用。还是我有一些奇怪的东西?例如错字。
我的环境
答案 0 :(得分:1)
基于您看到的错误消息,Postgres不知道在将数据库类型更改为整数时如何保留您设置的默认值。我建议:
您可以在同一呼叫中执行步骤2和3。您将需要在向上迁移中使用类似以下的内容:
def up
execute "ALTER TABLE users ALTER gender DROP DEFAULT;"
change_column :users, :gender, :integer, using: 'gender::integer', default: 0
end