【问题标题】:Building query in Postgres 9.4.2 for JSONB datatype using builtin function使用内置函数在 Postgres 9.4.2 中为 JSONB 数据类型构建查询
【发布时间】:2017-05-04 19:47:57
【问题描述】:

我有一个表模式如下:

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,但我更喜欢查询做同样的事情。我在select * from table_name 给出的结果上尝试了json_build_arrayrow_to_json,但没有运气。

任何帮助将不胜感激。

Here 是我为编写 JSONB 查询而寻找的链接

【问题讨论】:

    标签: postgresql postgresql-9.4 jsonb


    【解决方案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 数组,则需要检索所有行并将它们合并,然后才能开始发送数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-31
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2019-08-03
      • 2016-07-24
      • 1970-01-01
      相关资源
      最近更新 更多