我创建了一个表:
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 对象,那么您可以使用此查询,这样可以省去扩展数组的步骤。您可以直接调用对象:
SELECT
uuid,
answers ->> 'ans'
FROM
mytable
WHERE
answers ->> 'user' = '1'
关于sql - 在 PostgreSQL 中从 jsonb 获取特定对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57346900/