2016-10-07 1 views
2

Postgres-Dbをjson-documentsのソースとして使用するために、テーブルからJSONオブジェクトに2つの列を変換する必要があります。Postgresの2つの集約された列からJSONを構築する

は、だから私は「COLOR_ID」色のテーブルでは、「言語」と「名前」の列があります。

 
    color_id | language | name 
    1  |  "de" | "blau" 
    1  |  "en" | "blue" 
    1  |  "fr" | "bleu" 

そして、私のようなJSONオブジェクトを生成したいと思います:

 
    { 
     "de": "blau", 
     "fr": "bleu", 
     "en": "blue" 
    } 

は、私は残念ながら

012を生成

 
    SELECT 
     array_to_json(array_agg((language::text, name::text))), 
     color_id 
    FROM colors 
    GROUP BY color_id; 

で開始しました

 
    array to json     | color_id 
    "[{"f1":"de","f2":"blau"}  | 
     , {"f1":"en","f2":"blue"} | 1 
     , {"f1":"fr","f2":"bleu"}]" | 

多かれ少なかれシンプルになると思いますが、誤解を招く結果や構文エラーのために自分自身を見つけました。

敬具、ドミニク

答えて

1

使用jsonb_object_agg()

with data(color_id, language, name) as (
values 
    (1, 'de', 'blau'), 
    (1, 'en', 'blue'), 
    (1, 'fr', 'bleu') 
) 
select color_id, jsonb_object_agg(language, name) 
from data 
group by 1; 

color_id |    jsonb_object_agg    
----------+-------------------------------------------- 
     1 | {"de": "blau", "en": "blue", "fr": "bleu"} 
(1 row) 
関連する問題