PostgreSQL 从 jsonb 中提取键,异常“无法在标量上调用 jsonb_object_keys”

Zia*_*hal 6 sql postgresql json ruby-on-rails jsonb

我正在尝试使用 Postgres 中的 jsonb 解决问题。这里有很多问题,我想做的是:

SELECT table.column->>'key_1' as a FROM "table"
Run Code Online (Sandbox Code Playgroud)

我尝试使用 -> 以及一些括号组合,但我总是在 a.

所以我尝试先获取所有密钥,看看它是否甚至识别 jsonb 。

SELECT jsonb_object_keys(table.column) as a FROM "table"
Run Code Online (Sandbox Code Playgroud)

这引发了一个错误:

cannot call jsonb_object_keys on a scalar
Run Code Online (Sandbox Code Playgroud)

所以,要检查列类型(我创建的,所以我知道它是 jsonb,但无论如何)

SELECT  pg_typeof(column) as a FROM "table" ORDER BY "table"."id" ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

这在结果中正确地给了我“jsonb”。

中的值column类似于{"key_1":"New York","key_2":"Value of key","key_3":"United States"}

所以,我真的很困惑这里到底发生了什么,为什么将我的 json 数据称为标量?它实际上意味着什么以及如何解决这个问题?

在这方面的任何帮助都将非常有帮助。

PS:我正在使用 rails,将此作为该问题的一般问题发布。任何 Rails 特定的解决方案也可以工作。

Zia*_*hal 2

所以事实证明问题不仅仅是 SQL。

正如我提到的,我正在使用 Rails(5.1),我使用了'{}'jsonb 列的默认值。我通过在表的模型中定义列来使用双向序列化器。

删除这个序列化器并调整默认值才能{}真正解决问题。

我认为我的序列化程序对这些值做了一些处理,但是在数据库中,它仍然具有正确的值,就像我在问题中提到的那样。

我仍然不是 100% 清楚问题是什么。但无论如何都解决了。如果有人能够阐明问题到底是什么,那就太好了。

希望这可以帮助某人。