我有一个表模式如下:
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是我为JSONB
编写查询所寻找的链接答案 0 :(得分:1)
您可以使用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数组,则需要检索所有行并合并它们才能开始发送数据。