使用内置函数在 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_arrayrow_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 数组,则需要检索所有行并合并它们才能开始发送数据。