2016-12-28 37 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}  | 

希望這有助於有人...

相關問題