Ruby on rails 不能回避;ActiveRecord::StatementInvalid:PG::DatatypeMismatch:ERROR:column“的默认值;性别“;无法自动强制转换为整型;
我正在尝试将rails应用程序中的性别列更改为整数。据说,当使用postgresql时,我们必须以稍微不同的方式编写。i、 eRuby on rails 不能回避;ActiveRecord::StatementInvalid:PG::DatatypeMismatch:ERROR:column“的默认值;性别“;无法自动强制转换为整型;,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我正在尝试将rails应用程序中的性别列更改为整数。据说,当使用postgresql时,我们必须以稍微不同的方式编写。i、 e change_column :users, :gender, :integer, using: 'gender::integer' 或 然而,在我的情况下,上述仍然不工作,并得到以下错误 PG::DatatypeMismatch: ERROR: default for column "gender" cannot be cast automatically to t
change_column :users, :gender, :integer, using: 'gender::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
- 博士后:11.1
def up
execute "ALTER TABLE users ALTER gender DROP DEFAULT;"
change_column :users, :gender, :integer, using: 'gender::integer', default: 0
end
谢谢在我的例子中,首先下拉性别列,然后插入
change\u列:users,:gender,:integer,默认值:0
,它就可以工作了。但是你怎么知道错误表明Postgres不知道如何保持默认值呢?在你发布的错误消息中,error:default for column“gender”不能自动转换为integer
default for column“gender”'引用了列的现有默认值。我不知道该值在数据库上下文中的含义。。。但现在我明白了。谢谢
def up
execute "ALTER TABLE users ALTER gender DROP DEFAULT;"
change_column :users, :gender, :integer, using: 'gender::integer', default: 0
end