You need to enable JavaScript to run this app. Rails 6升级后修改PostgreSQL字段为jsonb迁移报错的正确语法是什么
优惠活动
大模型
产品
解决方案
定价
更多

Rails 6升级后修改PostgreSQL字段为jsonb迁移报错的正确语法是什么

问题原因

Rails 6 调整了change_column方法的参数解析逻辑,不再支持将USING类型转换子句直接拼接在数据类型字符串中,此前的写法会将整段jsonb USING xxx识别为数据类型名传入PostgreSQL,因此触发无效类型名、语法错误等报错。

正确迁移写法
change_column :pages, :content, :jsonb,
  null: false,
  default: '[]',
  using: 'content::jsonb'

参数说明:

  • 第三个参数直接传入:jsonb指定目标字段类型即可,无需拼接转换逻辑
  • 新增独立的using参数传入类型转换表达式,content::jsonb和CAST(content AS jsonb)两种写法在PostgreSQL中效果完全一致,任选其一即可
注意事项
  • 执行迁移前建议先清洗脏数据,避免无效JSON内容导致转换失败,可执行以下SQL查询不符合JSON格式的记录:
SELECT id, content FROM pages WHERE content IS NOT NULL AND NOT jsonb_valid(content::text);
  • 调整后默认值'[]'会自动被PostgreSQL识别为JSONB类型的空数组,无需额外转换。

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 17:54:05