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 comojsontipo de datos. No es necesario un yeso adicional. -
Mejor aún, usa un
LATERALreferencia enEXISTS. Esto es mucho más limpio que anidar con una función de devolución de conjuntos enSELECTlista. 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 elLIKEbásico /ILKEDonde 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...