Sinto que preciso da json_object_agg()
função do Postgres 9.4, mas não poderei atualizar a partir da 9.3 no momento. Existe uma maneira de fazer o que eu quero na 9.3? Aqui está o meu cenário. Eu tenho uma tabela click_activity
de dados que parece
user | offer | clicks
-----|-------|--------
fred |coupons| 3
fred |cars | 1
john |coupons| 2
Mas quero transformar isso em: (agregar a atividade por usuário)
user | activity
-----|----------
fred | {"coupons": 3, "cars": 1}
john | {"coupons": 2}
Eu acho que a json_object_agg()
função do Postgres 9.4 faria isso perfeitamente, tudo o que eu teria que chamar é
select user, json_object_agg(offer, clicks) from click_activity group by 1
Existe uma maneira de fazer isso na 9.3? Obrigado!
postgresql
postgresql-9.3
postgresql-9.4
json
thomaskeefe
fonte
fonte
Respostas:
Consegui emular o json_object_agg usando string_agg (disponível na 9.3).
Seu exemplo seria:
fonte
to_json
chamada:('{' || string_agg(to_json(offer) || ': ' || to_json(clicks), ',') || '}')::json
. As aspas duplas são adicionadas automaticamente ao redor dooffer
valor ao concatená-lo.Use insteade de json_object_agg => json_agg
fonte