💬

json型とjsonb型

2025/02/26に公開

Daily Blogging67日目

PostgreSQLでjsonデータを格納したくなったので調べてみた。

jsonを扱える型

PostgreSQLにはjsonを格納できる型が2つ存在する。

  • json型
  • jsonb型

b...?
bとはなんなのか
なぜ二つあるのか

2つの違い

2つの型は、格納するデータの形式が異なる。

  • json型
    • データをそのまま文字列に変換
  • jsonb型
    • データをバイナリに変換

bばバイナリのbでした

この違いにより、さらなる違いが生まれるよ

特徴 json 型 jsonb 型
データ形式 文字列として保存(パースされない) バイナリ形式で保存(最適化される)
キーの順序 入力時の順序を保持 自動的にソートされる
重複排除 同じキーが複数あってもそのまま保存される 同じキーがある場合、自動的に最後の値に統一される
インデックス 使用できない GINインデックスなどが使用可能
部分更新 できない(全体の更新が必要) jsonb_set で部分更新が可能
ストレージ効率 効率が悪い(余分な空白などを含む) 最適化されており効率が良い

使い分け

パフォーマンス、整合性、使い勝手の観点から、基本的にはjsonb型を使用した方が良い。

データをそのまま維持しておきたい場合はjson型を使用した方がよい。

パフォーマンスには要注意

jsonにしろjsonbにしろ、カラムのデータサイズが大きくなる可能性がある。
カラムのサイズが大きくなると通常のテーブルファイルじゃなくて、TOASTファイルに値が格納される。
こうなるとディスクI/Oが余分に増えることになりパフォーマンスに影響を与えるので注意が必要

Discussion