まず、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よりも多くのディスクスペースが必要です (時々そうではない) -
jsonbjsonよりも入力表現から構築するのに時間がかかります -
json操作には大幅にかかりますjsonbよりも時間がかかる (&解析は、jsonで何らかの操作を行うたびに実行する必要もあります 入力された値)
jsonbの場合 安定したリリースで利用可能になります。どちらかを簡単に選択できる場合、2つの主要なユースケースがあります。
- アプリケーションでJSON表現のみを使用する場合、PostgreSQLはこの表現の保存と取得にのみ使用されるため、
jsonを使用する必要があります。 。 - PostgreSQLでJSON値に対して多くの操作を行う場合、または一部のJSONフィールドでインデックスを使用する場合は、
jsonbを使用する必要があります。 。