sql - 在 PostgreSQL 中从 jsonb 获取特定对象时出错

标签 sql json postgresql postgresql-9.5 node-postgres

我创建了一个表:

CREATE TABLE mytable (
    uuid int,
    answers jsonb
); 

插入一些 JSON 值和 id :

   db.query('insert into mytable(uuid,answers) values($1,$2::jsonb)',
            [1,{ "user" : "1", "ans" : "Answer of 1" }])

我正在使用 node js 和 pg 作为 Postgres 的客户端。

数据输入成功,并按预期返回行。

SELECT answers FROM mytable 
{"ans": "Answer of 1","user": "1"}

但是当我试图检索值为 1 的“user”的“ans”的值时, 它返回了一个错误:

SELECT
    elements ->> 'ans'
FROM
    mytable,
    jsonb_array_elements(answers) elements
WHERE 
    elements ->> 'user' = '1'
ERROR:  cannot extract elements from an object
SQL state: 22023

最佳答案

this question您插入了一个 JSON 数组:[{...}, {...}]。现在,您的 SELECT 语句的结果集似乎是您插入了一个简单的对象:{...}。当然,您不能调用用于 JSON 数组的 jsonb_array_elements():demo with array , demo without array .

因此,如果您想插入一个 JSON 数组,您需要通过在您的 JSON 对象周围添加数组大括号来调整您的输入参数:[...]

如果您不想插入一个数组而是一个简单的 JSON 对象,那么您可以使用此查询,这样可以省去扩展数​​组的步骤。您可以直接调用对象:

demo:db<>fiddle

SELECT
    uuid,
    answers ->> 'ans'
FROM
    mytable
WHERE 
    answers ->> 'user' = '1'

关于sql - 在 PostgreSQL 中从 jsonb 获取特定对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57346900/

相关文章:

sql - 从.bak文件还原SQL Server无法获得独占访问

java - 即使使用 case 语句,SUM 结果值也会重复

php - 当数量设置为 0 不起作用时,从数据库中删除项目。仅从数组中删除

java - 如何使用 Jackson 以自定义方式实例化 bean?

postgresql - Postgres SQL - 连接来自 3 个表的数据以选择一列

java - 与 Java JDBC 作斗争 :sqlite connection using Intellij

arrays - 如何将表转换为 Json 数组?

php - 使用 extjs4 更改网格

postgresql - 将 Postgres 9.4.5 迁移到 11.1

sql - 为什么 Postgres 查询规划器受 LIMIT 影响?