Запросы для объекта массива в столбце Postgres jsonb
У меня есть таблица Postgres с 2 столбцами "узлы" и "отметка времени". Столбец "узлы" имеет тип jsonb и представляет собой массив объектов следующего формата:
[
{
"addr": {},
"node_number": "1",
"primary": false
},
{
"addr": {},
"node_number": "2",
"primary": true
},
]
Я хочу найти объект в этом массиве, который имеет "primary":true
в самой последней строке. Если выше был последний ряд, результат должен быть:
{
"addr": { },
"node_number": "2",
"primary": true
}
Я пытался:
SELECT(nodes -> 0) FROM table WHERE nodes @> '[{"primary": true}]'
order by timestamp desc
limit 1;
который дает объект с индексом 0 в массиве, а не желаемый объект, который имеет "primary": true
,
Как я могу реализовать запрос?
1 ответ
Решение
Использование jsonb_array_elements()
в боковом соединении:
select elem
from my_table
cross join jsonb_array_elements(nodes) as elem
where (elem->>'primary')::boolean
elem
---------------------------------------------------
{"addr": {}, "primary": true, "node_number": "2"}
(1 row)