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

consulta jsonb LIKE em objetos aninhados em uma matriz


Sua solução pode ser simplificada um pouco mais:
SELECT r.res->>'name' AS feature_name, d.name AS detail_name
FROM   restaurants r
     , jsonb_populate_recordset(null::foo, r.res #> '{payload, details}') d
WHERE  d.name LIKE '%oh%';

Ou ainda mais simples, com jsonb_array_elements() já que você não precisa do tipo de linha (foo ) neste exemplo:
SELECT r.res->>'name' AS feature_name, d->>'name' AS detail_name
FROM   restaurants r
     , jsonb_array_elements(r.res #> '{payload, details}') d
WHERE  d->>'name' LIKE '%oh%';

dbfiddle aqui

Mas isso não o que você perguntou exatamente:

Você está retornando todos os elementos da matriz JSON (0-n por linha da tabela base), onde uma chave específica ('{payload,details,*,name}' ) corresponde (com distinção entre maiúsculas e minúsculas).

E sua pergunta original tinha uma matriz JSON aninhada em cima disso. Você removeu a matriz externa para esta solução - eu fiz o mesmo.

Dependendo de seus requisitos reais, o novo recurso de pesquisa de texto do Postgres 10 pode ser útil.