Tak, to możliwe:
SELECT *
FROM tbl t, json_array_elements(t.json_col->'emails') AS elem
WHERE elem->>'id' = 123;
tbl
będąc nazwą Twojej tabeli, json_col
będąca nazwą kolumny JSON.
Więcej szczegółów w tej powiązanej odpowiedzi:
- Jak wysyłać zapytania za pomocą pól w nowym typie danych PostgreSQL JSON?
Więcej o niejawnym CROSS JOIN LATERAL
w ostatnim akapicie tej powiązanej odpowiedzi:
- PostgreSQL unnest() z numerem elementu
Indeks obsługujący tego rodzaju zapytania:
- Indeks do znajdowania elementu w tablicy JSON