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 公式ドキュメント(英語)。