Váš dotaz je blízko. json_each()
je klíčová funkce. Nebo jsonb_each() pro jsonb . Pár vylepšení:
SELECT *
FROM things t
WHERE EXISTS (
SELECT FROM json_each(t.blueprint) b
WHERE b.value->>'name' ILIKE 'azamund'
);
Starý sqlfiddle
db<>fiddle zde
-
json_each()již vrací hodnotu jakojsondatový typ. Není potřeba další obsazení. -
Ještě lepší je použít
LATERALodkaz vEXISTS. To je mnohem čistší než rozkládání pomocí funkce vrácení sady vSELECTseznam. Související: -
Použijte
ILIKE(~~*) pro shodu vzoru. Shoda s regulárním výrazem (~,~*) jsou výkonnější, ale také dražší. Použijte tedy základníLIKE/ILKEkde můžeš. Podrobnosti:
Alternativa s polem JSON
Už jste viděli moji související odpověď pro pole JSON:
I když se dotaz na vnořené objekty JSON zdá stejně jednoduchý, existuje vynikající podpora indexů pro pole:
Může být jednodušší / efektivnější s SQL/JSON v Postgres 12 ...