Postgres:如何获取 json 多个布尔列的数组?

Postgres: How to get json array of multiple boolean columns?

PG_VERSION: 9.2

我有一个带有多个布尔标志的 table。

例如:

id,flag1,flag2,flag3

问题是,我想获得这些标志的 json 数组,其计数如下:

[{"title":"flag1","count":2},{"title":"flag2","count":3},{"title":"flag3","count":0}]

如何实现这个结果?试过这个

    create or REPLACE function count_test(OUT json_string text) returns text
LANGUAGE plpgsql    AS $$
BEGIN    SELECT array_to_json(array_agg(rows))into json_string FROM ( select sum(case when flag1 then 1 else 0 end) as flag1,
sum(case when flag2 then 1 else 0 end) as flag2,
sum(case when flag3 then 1 else 0 end) as flag3 FROM flags
) rows;
  END;
$$;

但是有了这个我只能得到 [{"flag1":2,"flag2":2,"flag3":0}]

等待立即回复。

您可以将 row_to_json 结果聚合到数组,然后尝试将其转换为 json 等等,但考虑到 9.2 中非常有限的 json 支持,我只是构建 json 来自字符串,例如:

postgres=# with flags(id,flag1,flag2) as (values(1,true,true),(2,false,true))
, s as (select sum(flag1::int) as f1, sum(flag1::int) as f2 from flags)
select concat('[{"title":"flag1","count":',f1,'},{"title":"flag2","count":',f2,'}]')::json from s;
                          concat
-----------------------------------------------------------
 [{"title":"flag1","count":1},{"title":"flag2","count":1}]
(1 row)