Su consulta está cerca. json_each()
es la función clave. O jsonb_each()
para jsonb
. Un par de mejoras:
SELECT *
FROM things t
WHERE EXISTS (
SELECT FROM json_each(t.blueprint) b
WHERE b.value->>'name' ILIKE 'azamund'
);
Antiguo sqlfiddle
db<>fiddle aquí
-
json_each()
ya devuelve el valor comojson
tipo de datos. No es necesario un yeso adicional. -
Mejor aún, usa un
LATERAL
referencia enEXISTS
. Esto es mucho más limpio que anidar con una función de devolución de conjuntos enSELECT
lista. Relacionado: -
Usa
ILIKE
(~~*
) para la coincidencia de patrones. Coincidencias de expresiones regulares (~
,~*
) son más potentes, pero también más caras. Así que usa elLIKE
básico /ILKE
Donde puedes. Detalles:
Alternativa con matriz JSON
Ya ha visto mi respuesta relacionada para matrices JSON:
Si bien la consulta de objetos JSON anidados parece igual de simple, hay un soporte de índice superior. para la matriz:
Puede volverse más simple/más eficiente con SQL/JSON en Postgres 12...