jsonb
- jsonb
jsonb は、ASCII/UTF-8 ストリングとしてではなく、バイナリー・コードとして、分解されたバイナリー形式でデータを保管します。 これにより、変換によるオーバーヘッドが追加されるため、入力は若干遅くなりますが、再解析が不要となるため、処理は大幅に速くなります。
jsonb では索引付けもサポートされており、大きな利点となる場合があります。
jsonb では、空白、オブジェクト・キーの順序、および重複オブジェクト・キーが保持されません。 入力に重複キーが指定されている場合、最後の値のみが保持されます。
- アプリケーションでは、オブジェクト・キーの順序付けに関する従来の想定など、非常に特殊なニーズがない限り、
JSON データを jsonb として保管することをお勧めします。
- RFC 7159 は、'
JSON文字列が '\uXXXX で示される Unicode エスケープシーケンスを含むことを許可しています。 jsonb の入力関数では、データベース・エンコードが UTF8 でない限り、非 ASCII 文字 (U+007F を超える文字) の Unicode エスケープは許可されません。 jsonbは '\u0000 を拒否する。 その理由は'\u0000がPostgreSQL'sのテキスト型で表現できないからです。 jsonb では、Unicode Basic Multilingual Plane 外の文字の指定に Unicode サロゲート・ペアを使用することは適切であると見なされます。 有効な Unicode エスケープは、保管のために同等の ASCII 文字または UTF8 文字に変換されます。これには、サロゲート・ペアの単一文字へのフォールディングが含まれます。
- テキストの
JSON 入力を jsonb に変換する場合、RFC 7159 で記述されているプリミティブ型は、ネイティブの PostgreSQL 型に効率的にマップされます。 jsonb は、PostgreSQL 数値データ型の範囲外の数値を拒否します。