使用内置函数在 Postgres 9.4.2 中针对 JSONB 数据类型构建查询
Building query in Postgres 9.4.2 for JSONB datatype using builtin function
我有一个 table 架构如下:
DummyTable
-------------
someData JSONB
我所有的值都是一个 JSON 对象。例如,当您执行 select *
from DummyTable
时,它看起来像
someData(JSONB)
------------------
{"values":["P1","P2","P3"],"key":"ProductOne"}
{"values":["P3"],"key":"ProductTwo"}
我想要一个查询,它将给我如下结果集:
[
{
"values": ["P1","P2","P3"],
"key": "ProductOne"
},
{
"values": ["P4"],
"key": "ProductTwo"
}
]
我使用的是 Postgres 版本 9.4.2。我查看了相同的文档页面,但找不到会给出上述结果的查询。
但是,在我的 API 中,我可以通过遍历行来构建 JSON,但我更希望查询执行相同的操作。我尝试 json_build_array
、row_to_json
得到 select * from table_name
给出的结果,但没有成功。
如有任何帮助,我们将不胜感激。
Here 是 link 我想为 JSONB
编写查询
您可以使用 json_agg or jsonb_agg:
create table dummytable(somedata jsonb not null);
insert into dummytable(somedata) values
('{"values":["P1","P2","P3"],"key":"ProductOne"}'),
('{"values":["P3"],"key":"ProductTwo"}');
select jsonb_pretty(jsonb_agg(somedata)) from dummytable;
结果:
[
{
"key": "ProductOne",
"values": [
"P1",
"P2",
"P3"
]
},
{
"key": "ProductTwo",
"values": [
"P3"
]
}
]
虽然逐行检索数据并在客户端构建可以提高效率,因为服务器可以更快地开始发送数据 - 在它从存储中检索到第一个匹配的行之后。如果需要先构建 json 数组,则需要检索所有行并合并它们才能开始发送数据。
我有一个 table 架构如下:
DummyTable
-------------
someData JSONB
我所有的值都是一个 JSON 对象。例如,当您执行 select *
from DummyTable
时,它看起来像
someData(JSONB)
------------------
{"values":["P1","P2","P3"],"key":"ProductOne"}
{"values":["P3"],"key":"ProductTwo"}
我想要一个查询,它将给我如下结果集:
[
{
"values": ["P1","P2","P3"],
"key": "ProductOne"
},
{
"values": ["P4"],
"key": "ProductTwo"
}
]
我使用的是 Postgres 版本 9.4.2。我查看了相同的文档页面,但找不到会给出上述结果的查询。
但是,在我的 API 中,我可以通过遍历行来构建 JSON,但我更希望查询执行相同的操作。我尝试 json_build_array
、row_to_json
得到 select * from table_name
给出的结果,但没有成功。
如有任何帮助,我们将不胜感激。
Here 是 link 我想为 JSONB
编写查询您可以使用 json_agg or jsonb_agg:
create table dummytable(somedata jsonb not null);
insert into dummytable(somedata) values
('{"values":["P1","P2","P3"],"key":"ProductOne"}'),
('{"values":["P3"],"key":"ProductTwo"}');
select jsonb_pretty(jsonb_agg(somedata)) from dummytable;
结果:
[
{
"key": "ProductOne",
"values": [
"P1",
"P2",
"P3"
]
},
{
"key": "ProductTwo",
"values": [
"P3"
]
}
]
虽然逐行检索数据并在客户端构建可以提高效率,因为服务器可以更快地开始发送数据 - 在它从存储中检索到第一个匹配的行之后。如果需要先构建 json 数组,则需要检索所有行并合并它们才能开始发送数据。