22

Postgres で jsonb をいじり始めたところですが、比較的新しい概念であるため、オンラインで見つけるのが難しい例を見つけています。

以下のjsonをjsonbとして保存し、それを使用してクエリをテストしています。

{
  "lookup_id": "730fca0c-2984-4d5c-8fab-2a9aa2144534",
  "service_type": "XXX",
  "metadata": "sampledata2",
  "matrix": [
    {
        "payment_selection": "type",
        "offer_currencies": [
            {
              "currency_code": "EUR",
              "value": 1220.42
            }
        ]
    }
  ]
}

offer_currencies 配列にアクセスできます

SELECT element -> 'offer_currencies' -> 0
FROM test t, jsonb_array_elements(t.json -> 'matrix') AS element
WHERE element ->> 'payment_selection' = 'type'

"{"value": 1220.42, "currency_code": "EUR"}" の結果が得られるため、以下のクエリを実行すると取得されます (" を ' に変更する必要があります)。

select * from jsonb_each_text('{"value": 1220.42, "currency_code": "EUR"}')

Key            | Value
---------------|----------
"value"        | "1220.42"
"currency_code"| "EUR"

上記の理論を使用して、このクエリを作成しました

SELECT jsonb_each_text(data)
FROM (SELECT element -> 'offer_currencies' -> 0 AS data
  FROM test t, jsonb_array_elements(t.json -> 'matrix') AS element
  WHERE element ->> 'payment_selection' = 'type') AS dummy;

しかし、これはcsvを1列に出力します

record
---------------------
"(value,1220.42)"
"(currency_code,EUR)"
4

2 に答える 2