我正在尝试在 Postgres 中使用 jsonb。这里有很多问题,我想做的是:
SELECT table.column->>'key_1' as a FROM "table"
我尝试了 -> 以及括号的一些组合,但我总是在 a 中得到 nil。
所以我首先尝试获取所有 key ,看看它是否能识别 jsonb。
SELECT jsonb_object_keys(table.column) as a FROM "table"
这引发了一个错误:
cannot call jsonb_object_keys on a scalar
所以,要检查列类型(我创建的,所以我知道它是 jsonb,但无论如何)
SELECT pg_typeof(column) as a FROM "table" ORDER BY "table"."id" ASC LIMIT 1
这在结果中正确地给了我“jsonb”。
列
中的值类似于{"key_1":"New York","key_2":"Value of key","key_3":"United States"}
所以,我真的很困惑这里到底发生了什么,为什么它把我的 json 数据称为标量?它实际上意味着什么以及如何解决这个问题?
在这方面的任何帮助都会非常有帮助。
PS:我正在使用 Rails,将此作为问题的一般问题发布。任何特定于 Rails 的解决方案也适用。
最佳答案
所以问题证明不仅仅是 SQL。
正如我提到的,我使用的是 rails(5.1),我为 jsonb 列使用了默认值 '{}'
。我通过在我的表模型中定义它来为该列使用双向序列化程序。
删除此序列化程序并将默认值调整为 {}
实际上解决了问题。
我认为我的序列化程序对这些值做了一些事情,但在数据库中,它仍然具有我在问题中提到的正确值。
我仍然不是 100% 清楚问题出在哪里。但无论如何都解决了。 如果有人能阐明问题的确切原因,那就太好了。
希望这可能对某人有所帮助。
关于sql - PostgreSQL 从 jsonb 中提取 key ,异常 "cannot call jsonb_object_keys on a scalar",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45009750/