Как извлечь данные из столбца JSONB - PullRequest
3 голосов
/ 18 июня 2020

У нас есть vehicle_info, хранящийся в формате JSONB в таблице транспортных средств.

id |                                     vehicle_info(JSONB)                                     
----+------------------------------------------------------------------------------------
  1 | {"milestone": {"Honda_car": {"status":"sold"}}
  3 | {"milestone": {"Mitsubishi_car", {"status":"available"}}
  2 | {"milestone": {"Honda_car", {"status":"available"}}

Как мне извлечь данные с суффиксом car. Ниже приведен тот, который я мог придумать, но в конечном итоге приводит к ошибке .

select * from vehicle where milestone -> LIKE '%_car' ->>'status'

1 Ответ

2 голосов
/ 18 июня 2020

Если я правильно следил за вами, вы можете перечислить ключи с помощью jsonb_object_keys(), затем отфильтровать те, которые заканчиваются на '_car', и, наконец, извлечь значения:

select t.*, t.vehicle_info -> 'milestone' -> k.val ->> 'status' status
from mytable t
cross join lateral jsonb_object_keys(t.vehicle_info -> 'milestone') as k(val)
where k.val like '%_car'

Демо на DB Fiddle :

id | vehicle_info                                               | status   
-: | :--------------------------------------------------------- | :--------
 1 | {"milestone": {"Honda_car": {"status": "sold"}}}           | sold     
 3 | {"milestone": {"Mitsubishi_car": {"status": "available"}}} | available
 2 | {"milestone": {"Honda_car": {"status": "available"}}}      | available
...