Eu tenho que resumir os dados em pg_stat_activity e retorná-los como json. Postgres 9.3 a bordo. O resultado necessário é como:
{
"web": 67,
"postgres": 2,
"totalSessions": 69,
"idle in transaction": 2,
"active": 1,
"idle": 66
}
onde active é o número de sessões ativas,ocioso - de ocioso, total - a soma de ambos e o restante é o número de sessões por usuário. Não precisamos agrupá-lo por bancos de dados, mas o princípio seria o mesmo.
Não - como posso fazer isso?
Respostas:
0 para resposta № 1O qry que eu criei não é melhor então:
mon=# with pre as (
select DISTINCT
concat(""totalSessions":",sum(count(1)) over (),"") total
, concat(""",usename,"":",sum(count(1)) over (partition by usename),"") u
, concat(""",state,"":",sum(count(1)) over (partition by state),"") s
from pg_stat_activity
group by state,usename
)
select concat("{",string_agg(j,","),"}")::json from (
select distinct u j from pre u
union all
select distinct total from pre s
union all
select distinct s from pre s
) pg_stat_act
;
concat
-------------------------------------------------------------------------------------------
{"web":67,"postgres":2,"totalSessions":69,"idle in transaction":2,"active":1,"idle":66}
(1 row)
Time: 1.807 ms