Postgresql JSON

使えそうなJSON処理関数

1つの配列を要素ごとにレコードに分解する

json_array_elements(information)

値の型を判定する(json_array_elements などを使う時にarray型の値に絞る)

where json_typeof(information) = 'array'
where json_typeof(information) = 'object'

オブジェクトがネストされた構造から値を取り出す

json_extract_path_text(element, 'gender')

サンプル

SELECT json_extract_path_text(el, 'gender') AS gender,
       COUNT(1)
  FROM (SELECT json_array_elements(information) AS el, information FROM results WHERE json_typeof(information) = 'array') AS info
-- WHERE json_extract_path_text(el, 'gender')  = 'female'
 WHERE json_extract_path_text(el, 'gender') IS NOT NULL
 GROUP BY gender;
SELECT information::jsonb FROM results

json型とjsonb型

  • 参考記事
  • json 型
    • 実態は JSON テキストをそのまま文字列として保持しただけのもの
    • 参照するたびにテキストのJSONを毎回パースする => 非効率だ
  • jsonb型
    • 入力時にのみjsonのテキストの解析を行い、正規化されたバイナリ形式で格納される
    • json型よりも値評価の効率が上がっている
  • 結局どっちがいいの?
    • jsonbでもカラムの中身は普通に読める
    • アクセス効率もjsonbのほうが優位
    • 特にjsonbができた以降jsonを積極的に使う理由はなくなったみたい
Recent Entries