Jak říká chybová zpráva, argumenty pro WHERE
nesmí vrátit sadu. jsonb_array_elements
vrací množinu a nelze ji porovnat s jedinou hodnotou. Ve druhém dotazu máte křížové spojení uvnitř výběru a to jej převede na vhodný výsledek pro použití WHERE
zapnuto.
Můžete to udělat také tímto způsobem
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Zde vám podvýběr umožní použít IN
operátor najít požadovanou hodnotu, protože výsledek již není množina.
Dalším způsobem je dotaz jsonb přímo
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
Tímto způsobem nemusíte převádět jsonb na sadu výsledků a hledat v ní.