Som felmeddelandet säger, argument till WHERE
får inte returnera ett set. jsonb_array_elements
returnerar en uppsättning och den kan inte jämföras med ett enda värde. I den andra frågan har du en korskoppling inuti select och som omvandlar den till ett lämpligt resultat för att använda WHERE
på.
Du kan också göra det på det här sättet
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Här låter undervalet dig använda IN
operatorn för att hitta det önskade värdet eftersom resultatet inte längre är en uppsättning.
Ett annat sätt är att fråga jsonb direkt
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
På så sätt behöver du inte konvertera jsonb till en resultatuppsättning och söka i den.