2016-12-28 35 views
1

我使用Postges 9.4和我有有jsonb场为对象的数组的表。如何通过jsonb对象数组循环对象中获取密钥的值的Postgres

下面是一个示例字段:

[{"pk": 224, "arbitrary_value": 50, "description": "United States"}, {"pk": 125, "arbitrary_value": 10, "description": "Canada"}]

在该阵列领域中,有两个对象。但它是一个可变长度。

我有一个查询,看起来像这样:

select jsonb 
    , array_agg(...) 
from public.jsonb_data 

array_agg(...)专栏中,我需要能够返回pk值数组作为包含在jsonb场的每个对象。

结果集应该是这个样子:

| jsonb | array_agg | 
| ----- | --------- | 
| [{"pk": 224, "arbitrary_value": 50, "description": "United States"}, {"pk": 125, "arbitrary_value": 10, "description": "Canada"}] | {224,125} | 

对不起,不知道如何让在此编辑器表...

我曾尝试用各种可用的jsonb运营商乱搞在Postgres 9.4中,但如果有人拥有它们,我想要任何指针。

回答

1

尤里卡!

我发现,使用jsonb_to_recordset()功能。

这里是我进行的查询:

select primary_key 
    , array_agg(e.pk) 
from public.jsonb_data, jsonb_to_recordset(jsonb_field) as e(pk int) 
group by primary_key 
order by primary_key 

然后,这给了我一个完美的输出:

| Primary Key | jsonb_array | 
| ----------- | ----------- | 
| 1   | {224,152} | 
| 2   | {224,186} | 
| 3   | {224}  | 

希望这有助于有人...

相关问题