PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que não posso consultar diretamente em jsonb_array_elements?


Como diz a mensagem de erro, argumentos para WHERE não deve retornar um conjunto. jsonb_array_elements retorna um conjunto e não pode ser comparado a um único valor. Na segunda consulta você tem uma junção cruzada dentro do select e isso converte em um resultado adequado para usar WHERE sobre.

Você também pode fazer assim
SELECT mydata.pk FROM mydata
  WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');

Aqui a subseleção permitirá que você use o IN operador para encontrar o valor desejado, pois o resultado não é mais um conjunto.

Outra maneira é consultar o jsonb diretamente
SELECT mydata.pk FROM mydata
  WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;

Dessa forma, você não precisa converter o jsonb em um conjunto de resultados e pesquisar dentro dele.