用語集のすべての用語

JSONB 型

PostgreSQL の JSONB とは?JSON との違いは?

jsonb は JSON を分解されたバイナリ形式で保存するため、高速にクエリでき、インデックスも作成できます。ほとんどのアプリケーションが使うべき JSON 型です。

PostgreSQL には 2 つの JSON 型があります。json は入力テキストをそのまま保存し、jsonb は分解されたバイナリ形式で保存します。jsonb は変換が必要なぶん書き込みがわずかに遅くなりますが、処理は大幅に速く、インデックスにも対応しています。

jsonb は空白、キーの順序、重複キーを保持しません。同じキーが 2 回現れた場合は、最後の値だけが保持されます。JSON 値を取得するには ->、テキストを取得するには ->> を使い、あるドキュメントが別のドキュメントを含むかどうかは @> で判定します。jsonb 列に GIN インデックスを作成すると、包含とキー存在のクエリが高速になります。

例

この例では、@> 演算子を使って city が Osaka のプロフィールを検索し、別のプロフィールのドキュメントを整形して表示します。

CREATE TABLE profiles (id int PRIMARY KEY, data jsonb NOT NULL);
INSERT INTO profiles VALUES
  (1, '{"name": "Ana", "city": "Lisbon", "tags": ["admin"]}'),
  (2, '{"name": "Ben", "city": "Osaka"}');

SELECT data->>'name' AS name FROM profiles WHERE data @> '{"city": "Osaka"}';
SELECT jsonb_pretty(data) FROM profiles WHERE id = 1;

拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。

出典

PostgreSQL 公式ドキュメント(英語)。

関連用語