PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso eseguire una query LIKE per una chiave jsonb?

Il tuo esempio non dovrebbe funzionare perché non ci sono cast impliciti tra jsonb e text tipi. Puoi imporre la trasmissione:

SELECT '{"this": 1, "this_that": 0, "this_and_that": 5}'::jsonb::text 
            like '%"this%';

Non è una soluzione pulita. Un po' meglio è decomprimere json e filtrare i dati decompressi con l'unione laterale

postgres=# SELECT key FROM  myjson, lateral jsonb_each_text(j) 
             WHERE key LIKE 'this\_%';
┌───────────────┐
│      key      │
╞═══════════════╡
│ this_that     │
│ this_and_that │
└───────────────┘
(2 rows)