jsonb
Postgres9.4以降
できます jsonb_array_elements()
を使用して、以下と同じクエリを使用します 。
ただし、 jsonb
を使用してください 「含む」演算子@>
式data->'objects'
の一致するGINインデックスと組み合わせて :
CREATE INDEX reports_data_gin_idx ON reports
USING gin ((data->'objects') jsonb_path_ops);
SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';
キーオブジェクト
以降 JSON配列を保持します 、検索語の構造を一致させ、配列要素も角かっこで囲む必要があります。プレーンレコードを検索するときは、配列ブラケットを削除してください。
その他の説明とオプション:
- JSON配列内の要素を検索するためのインデックス
json
Postgres9.3以降
関数json_array_elements()
を使用してJSON配列をネスト解除します FROM
の横方向の結合 節とその要素のテスト:
SELECT data::text, obj
FROM reports r, json_array_elements(r.data#>'{objects}') obj
WHERE obj->>'src' = 'foo.png';
db<>ここでフィドル
古いsqlfiddle
または、シングルだけに相当します ネストのレベル:
SELECT *
FROM reports r, json_array_elements(r.data->'objects') obj
WHERE obj->>'src' = 'foo.png';
->>コード> 、
->
および#>
オペレーターはマニュアルで説明されています。
どちらのクエリも暗黙のJOINLATERAL
を使用します 。
密接に関連している:
- JSON列の配列要素のクエリ