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列の配列要素のクエリ