微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rails Postgres 迁移:无效类型名称“jsonb USING content::jsonb”或无效类型名称“jsonb USING CAST(content AS jsonb)

如何解决Rails Postgres 迁移:无效类型名称“jsonb USING content::jsonb”或无效类型名称“jsonb USING CAST(content AS jsonb)

红宝石 2.7.3 导轨 6.1.3.1 PG 1.2.3 Postgresql 12.7

我正在将 Rails 4 应用程序迁移到 Rails 6。经过大量 gem 更改后,我的迁移现在在表更改时失败,将列更改为 JSONB 类型

现在失败的迁移的原始内容

change_column :pages,:content,'jsonb USING CAST(content AS jsonb)',null: false,default: '[]'

我尝试摆脱演员阵容:

change_column :pages,'jsonb',default: '[]'

然后抛出错误

PG::DatatypeMismatch: ERROR:  column "content" cannot be cast automatically to type jsonb
HINT:  You might need to specify "USING content::jsonb".

如果我将它切换到这种风格,它会以与第一种风格相同的方式爆炸

    change_column :pages,'jsonb USING content::jsonb',default: '[]'

抛出错误

PG::SyntaxError: ERROR:  Syntax error at or near "USING"
LINE 1: SELECT 'jsonb USING CAST(content AS jsonb)'::regtype::oid
               ^
CONTEXT:  invalid type name "jsonb USING CAST(content AS jsonb)"

对这里的正确语法有什么想法吗?

解决方法

您可以尝试将 using 与转换一起使用(我知道,使用两次听起来很奇怪!)

change_column :pages,:content,:jsonb,using: "content::JSONB",null: false,default: '[]'

看看是否有效。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。