Tenemos una información del vehículo almacenada en formato JSONB en la tabla de vehículos.
id | vehicle_info(JSONB) ----+------------------------------------------------------------------------------------ 1 | {"milestone": {"Honda_car": {"status":"sold"}} 3 | {"milestone": {"Mitsubishi_car", {"status":"available"}} 2 | {"milestone": {"Honda_car", {"status":"available"}}¿Cómo extraigo los datos que tienen el sufijo auto? A continuación se muestra el que se me ocurrió pero que terminó en un error.
select * from vehicle where milestone -> LIKE '%_car' ->>'status'Si te seguí correctamente, puedes enumerar las claves con jsonb_object_keys() , luego filtrar aquellas que terminan con '_car' y finalmente extraer los valores:
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'
identificación | info_vehiculo | estado
-: | :------------------------------------------------- -------- | :--------
1 | {"hito": {"Honda_car": {"estado": "vendido"}}} | vendido
3 | {"hito": {"Mitsubishi_car": {"estado": "disponible"}}} | disponible
2 | {"hito": {"Honda_car": {"estado": "disponible"}}} | disponible