Sì, è possibile:
SELECT *
FROM tbl t, json_array_elements(t.json_col->'emails') AS elem
WHERE elem->>'id' = 123;
tbl
essendo il nome della tua tabella, json_col
essendo il nome della colonna JSON.
Maggiori dettagli in questa risposta correlata:
- Come faccio a eseguire query utilizzando i campi all'interno del nuovo tipo di dati JSON di PostgreSQL?
Maggiori informazioni sull'implicito CROSS JOIN LATERAL
nell'ultimo paragrafo di questa risposta correlata:
- PostgreSQL unnest() con numero elemento
Indice per supportare questo tipo di query:
- Indice per trovare un elemento in un array JSON