我在PostgreSQL 9.5的一些网站上以jsonb格式存储大量的json。其中一个字段是具有相同信息的Jsons数组。下面是一个例子。
[
{
"text": "JIMIN",
"indices": [
16,
22
]
},
{
"text": "PUMA",
"indices": [
23,
28
]
}
]我想检索所有的text值,也就是说,我想要进行一个查询,在这个示例中给出JIMIN和PUMA。我找不到一种方法可以通过共用运算符(如#>>)来完成这一任务。有办法做到这一点吗?
发布于 2016-10-10 12:49:19
您没有提供任何代码,所以我将创建一个包含一行和一些查询的示例表,以提取所需的信息。
CREATE TABLE test (myfield jsonb);负载数据:
INSERT INTO test (myfield) VALUES ('
[
{
"text": "JIMIN",
"indices": [
16,
22
]
},
{
"text": "PUMA",
"indices": [
23,
28
]
}
]
'::jsonb);要提取特定项,让我们假设第二个数组项的text字段:
SELECT myfield#>>'{1,text}' AS text FROM test;这将产生以下结果:
text
------
PUMA
(1 row)为了提取数组中的所有text字段,可能的解决方案是:
SELECT (jsonb_array_elements(myfield)::jsonb)->'text' AS text FROM test;产出如下:
text
---------
"JIMIN"
"PUMA"
(2 rows)显然,这适用于许多记录:每个数组项将被移植到每个数组的一行。此查询与PostgreSQL 9.5兼容。查看官方文档,以创建更高效或更通用的查询( https://www.postgresql.org/docs/9.5/static/functions-json.html )。
https://dba.stackexchange.com/questions/151601
复制相似问题