Ja, das ist möglich:
SELECT *
FROM tbl t, json_array_elements(t.json_col->'emails') AS elem
WHERE elem->>'id' = 123;
tbl
Ihr Tabellenname ist json_col
der Name der JSON-Spalte ist.
Weitere Details in dieser verwandten Antwort:
- Wie frage ich mit Feldern innerhalb des neuen PostgreSQL-JSON-Datentyps ab?
Mehr zum impliziten CROSS JOIN LATERAL
im letzten Absatz dieser verwandten Antwort:
- PostgreSQL unnest() mit Elementnummer
Index zur Unterstützung dieser Art von Abfrage:
- Index zum Auffinden eines Elements in einem JSON-Array