Seperti yang dikatakan pesan kesalahan, argumen ke WHERE tidak harus mengembalikan satu set. jsonb_array_elements mengembalikan satu set dan tidak dapat dibandingkan dengan satu nilai. Dalam kueri kedua Anda memiliki gabungan silang di dalam pilih dan yang mengubahnya menjadi hasil yang sesuai untuk menggunakan WHERE aktif.
Anda juga bisa melakukannya dengan cara ini
SELECT mydata.pk FROM mydata
WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');
Di sini subselect akan memungkinkan Anda untuk menggunakan IN operator untuk menemukan nilai yang diinginkan karena hasilnya bukan lagi himpunan.
Cara lain adalah dengan menanyakan jsonb secara langsung
SELECT mydata.pk FROM mydata
WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;
Dengan cara ini Anda tidak perlu mengonversi jsonb menjadi kumpulan hasil dan mencari di dalamnya.