在 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 对象,那么您可以使用此查询,这样可以省去扩展数组的步骤。您可以直接调用对象:
SELECT
uuid,
answers ->> 'ans'
FROM
mytable
WHERE
answers ->> 'user' = '1'
我创建了一个 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'
;
在[{...}, {...}]
. 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 对象,那么您可以使用此查询,这样可以省去扩展数组的步骤。您可以直接调用对象:
SELECT
uuid,
answers ->> 'ans'
FROM
mytable
WHERE
answers ->> 'user' = '1'