2017-05-04 14 views
0

JSONB數據類型我有一個表的架構如下:大廈查詢Postgres裏9.4.2使用內置函數

DummyTable 
------------- 
someData JSONB 

我所有的值將是一個JSON對象。例如,當你做一個select * from DummyTable,它看起來像

someData(JSONB) 
------------------ 
{"values":["P1","P2","P3"],"key":"ProductOne"} 
{"values":["P3"],"key":"ProductTwo"} 

我想要一個查詢,這將給我造成設置如下:

[ 
    { 
    "values": ["P1","P2","P3"], 
    "key": "ProductOne" 
    }, 
    { 
    "values": ["P4"], 
    "key": "ProductTwo" 
    } 
] 

我使用Postgres的版本9.4.2。我查看了相同的文檔頁面,但找不到可以給出上述結果的查詢。

但是,在我的API中,我可以通過遍歷行來構建JSON,但我更願意使用相同的查詢。我嘗試了json_build_array,row_to_json,結果將由select * from table_name給出,但沒有運氣。

任何幫助,將不勝感激。

Here是我看的鏈接編寫JSONB

查詢

回答

1

您可以使用json_agg or jsonb_agg

create table dummytable(somedata jsonb not null); 
insert into dummytable(somedata) values 
    ('{"values":["P1","P2","P3"],"key":"ProductOne"}'), 
    ('{"values":["P3"],"key":"ProductTwo"}'); 
select jsonb_pretty(jsonb_agg(somedata)) from dummytable; 

結果:

[ 
    { 
     "key": "ProductOne", 
     "values": [ 
      "P1", 
      "P2", 
      "P3" 
     ] 
    }, 
    { 
     "key": "ProductTwo", 
     "values": [ 
      "P3" 
     ] 
    } 
] 

雖然行檢索數據行在客戶端構建可以更高效,因爲服務器可以在從存儲中檢索到第一個匹配行後開始快速發送數據。如果它需要首先構建json數組,那麼在能夠開始發送數據之前,需要檢索所有行併合並它們。