PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich eine LIKE-Abfrage für einen jsonb-Schlüssel durchführen?

Ihr Beispiel sollte nicht funktionieren, da es keine implizite Umwandlung zwischen jsonb gibt und text Typen. Sie können das Casting erzwingen:

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

Es ist keine saubere Lösung. Etwas besser ist das Entpacken von json und das Filtern über entpackte Daten mit Lateral Join

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