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

Error while getting particular object from jsonb in PostgreSQL

我创建了一个 table :

CREATE TABLE mytable (
    uuid int,
    answers jsonb
); 

插入了一些 JSON 值和 ID :

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

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

数据已成功输入并且return符合预期的行。

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

但是当我试图检索值为 1 的 "user" 的 "ans" 的值时, 它 return 出错了:

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

希望我正确理解你的问题。

请检查以下查询。

SELECT
    answers ->> 'ans'
FROM
    mytable
where answers ->> 'user' = '1'
;

you inserted an JSON array: [{...}, {...}]. Now, the result set of your SELECT statement seems that you inserted a simple object: {...}. Of course then you cannot call jsonb_array_elements() which is for JSON arrays: demo with array, demo without array.

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

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

demo:db<>fiddle

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