まず、hstore
はcontribモジュールであり、キー=>値のペアのみを保存できます。ここで、キーと値はtext
のみです。 s(ただし、値はsql NULL
にすることができます sも)。
両方のjson
&jsonb
有効なJSON値を保存できます (仕様で定義されています)。
F.ex.これらは有効なJSON表現です:null
、true
、[1,false,"string",{"foo":"bar"}]
、{"foo":"bar","baz":[null]}
-hstore
JSONの機能と比較すると、ほんの少しのサブセットです(ただし、このサブセットのみが必要な場合は問題ありません)。
json
の唯一の違い &jsonb
それらのストレージです:
-
json
プレーンテキスト形式で保存されますが、 -
jsonb
バイナリ表現で保存されます
これには3つの主要な結果があります:
-
jsonb
通常、保存にはjson
よりも多くのディスクスペースが必要です (時々そうではない) -
jsonb
json
よりも入力表現から構築するのに時間がかかります -
json
操作には大幅にかかりますjsonb
よりも時間がかかる (&解析は、json
で何らかの操作を行うたびに実行する必要もあります 入力された値)
jsonb
の場合 安定したリリースで利用可能になります。どちらかを簡単に選択できる場合、2つの主要なユースケースがあります。
- アプリケーションでJSON表現のみを使用する場合、PostgreSQLはこの表現の保存と取得にのみ使用されるため、
json
を使用する必要があります。 。 - PostgreSQLでJSON値に対して多くの操作を行う場合、または一部のJSONフィールドでインデックスを使用する場合は、
jsonb
を使用する必要があります。 。