Jak mówi komunikat o błędzie, argumenty do WHERE
nie może zwrócić zestawu. jsonb_array_elements
zwraca zestaw i nie można go porównać z pojedynczą wartością. W drugim zapytaniu masz sprzężenie krzyżowe wewnątrz zaznaczenia, które konwertuje je na odpowiedni wynik do użycia WHERE
wł.
Możesz to również zrobić w ten sposób
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Tutaj podwybór pozwoli ci użyć IN
operatora, aby znaleźć żądaną wartość, ponieważ wynik nie jest już zestawem.
Innym sposobem jest bezpośrednie zapytanie jsonb
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
W ten sposób nie musisz konwertować jsonb na zestaw wyników i przeszukiwać go.