PostgreSQLのJSONデータ型にはjson型とjsonb型という2種類のデータ型があることを知ったので違いを調べてみた
www.postgresql.jp 上のドキュメントを引用してまとめる
- 現実的に主要な違いは効率
- jsonデータ型は入力テキストの正確なコピーで格納し、処理関数を実行するたびに再解析する必要がある
- jsonbデータ型は分解されたバイナリ形式で格納される
- 空白を保持しない
- オブジェクトキーの順序を保持せず、重複したオブジェクトキーを保持しない
- jsonbデータ型は格納するときには変換のオーバーヘッドのため少し遅くなるが、処理するときには、全く再解析が必要とされないので大幅に高速化される
- jsonbデータ型はインデックスをサポートしている
一般的に、ほとんどのアプリケーションではJSONデータ型としてjsonb型のほうが望ましいとのこと
JSONがjsonb型に変換されるときの注意事項
JSONがjsonb型に変換されるとき、プリミティブ型はPostgreSQLのネイティブな型に変換される
その際にマイナーな制約があるので注意が必要
たとえば、PostgreSQLのnumeric型の範囲外の数を拒否するなど、RFC 7159で許可されているがPostgreSQLで交換フォーマットとしてJSONを使用する場合は、数値精度を失う危険性がある