sql - PostgreSQL 从 jsonb 中提取 key ,异常 "cannot call jsonb_object_keys on a scalar"

标签 sql ruby-on-rails json postgresql jsonb

我正在尝试在 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/

相关文章:

php - PHP-MySQL中OAuth的简单演示

sql - 根据地区获取时区

ruby-on-rails - Ruby on Rails 4 : How to authenticate to Azure AD from Rails Application?

ruby-on-rails - 如何使同一数据库行的多个 ActiveRecord 实例保持同步?

java - 复合键,比较

MySQL 显示所需类(class)已完成

ruby-on-rails - 保存父模型和嵌套关联后,在父模型上创建后运行 Rails

javascript - 如何在 Javascript 中循环 JSON 响应以获取特定数据

javascript - AJAX 响应的警报部分

javascript - AJAX-Post 之后文件未下载