2016-04-12 2 views
3

内のすべてのJSONフィールドのキーの配列を取得し、このフィールドは、JSONのタイプは次の例のように値を持っている私はユーザーと呼ばれるテーブルがあり、テーブル内の友人と呼ばれる分野があるPostgreSQLの

{"blockList": {"199": {"date": 1453197190, "status": 1}, "215": {"date": 1459325611, "status": 1}, "219": {"date": 1454244074, "status": 1}, "225": {"date": 1453981312, "status": 1}, "229": {"date": 1459327685, "status": 1}}, "followers": {"211": {"date": 1452503369}, "219": {"date": 1452764627}, "334": {"date": 1456396375}}, "following": {"215": {"date": 1459325619}, "219": {"date": 1453622322}, "226": {"date": 1454244887}, "229": {"date": 1459327691}}, "friendList": {"213": {"date": 1453622410, "type": 2, "status": 1}, "214": {"date": 1452763643, "status": 1}, "215": {"date": 1455606872, "type": 2, "status": 2}, "218": {"date": 1453280047, "status": 1}, "219": {"date": 1453291227, "status": 2}, "221": {"date": 1453622410, "type": 2, "status": 1}, "224": {"date": 1453380152, "type": 2, "status": 1}, "225": {"date": 1453709357, "type": 2, "status": 2}, "226": {"date": 1454244088, "type": 2, "status": 1}, "229": {"date": 1454326745, "type": 2, "status": 2}}} 

このレコードには、ブロックされたユーザーのオブジェクトを格納するblockListオブジェクトがあります。私は必要なもの は、(アレイ内のすべてのオブジェクトキーを返す)この

["199", "215", "219", "225", "229"] 

のようなすべてのブロックリストのキー私はそれを行うためにplpgsqlが関数を記述することができますどのように任意のヘルプの配列を返すのですか? 私はpsotgresqlの初心者ですから、助けてください。

答えて

3

使用json_object_keys

SELECT ARRAY_AGG(f) 
FROM (
    SELECT json_object_keys(friends->'blockList') f 
    FROM users 
) u; 
┌───────────────────────┐ 
│  array_agg  │ 
├───────────────────────┤ 
│ {199,215,219,225,229} │ 
└───────────────────────┘ 
(1 row) 

注:
あなたはjsonbタイプ(とないjson 1)を使用している場合は、JSONを使用する必要がありますb _object_keys関数。

+0

ERROR:関数json_object_keys(jsonb)は LINE 4が存在しません: - :機能なしが指定された名前と引数の型と一致しないSELECT json_object_keys ^ ヒントF(友人> 'ブロックリストを')。明示的な型キャストを追加する必要があるかもしれません。 –

+0

'jsonb'を使っているなら' jsonb_object_keys'関数を使う必要があります。 – Marth

+0

おっと、私はarray_agg、素晴らしい答えを忘れました。 – Imran

3

SELECT array_agg(ks) FROM ( SELECT json_object_keys(friends->'blockList') AS ks FROM users ) x

私は証明するためにSQLのフィドルhereを作成しました。

注:userは予約語なので、テーブルusersを呼び出しました。 (そう、あなたがfriends->'blockList'で行うことができますblockListキー、のためにオブジェクトを選択する必要があります)、および配列にそれらを集約するarray_aggを使用してJSONオブジェクトの最も外側のキーを含むセットに

関連する問題