Я хотел бы получить доступ к индексу элемента в массиве jsonb, например:
SELECT
jsonb_array_elements(data->'Steps') AS Step,
INDEX_OF_STEP
FROM my_process
Я не вижу никакой функции в руководстве для этого . Это как-то возможно?
Я хотел бы получить доступ к индексу элемента в массиве jsonb, например:
SELECT
jsonb_array_elements(data->'Steps') AS Step,
INDEX_OF_STEP
FROM my_process
Я не вижу никакой функции в руководстве для этого . Это как-то возможно?
Используйте with ordinality.
Для этого вам нужно вызвать функцию в предложении from
:
with my_process(data) as (
values
('{"Steps": ["first", "second"]}'::jsonb)
)
select value as step, ordinality- 1 as index
from my_process
cross join jsonb_array_elements(data->'Steps') with ordinality
step | index
----------+-------
"first" | 0
"second" | 1
(2 rows)
Читайте в документации (7.2.1.4. Таблица Функции):
Если указано предложение WITH ORDINALITY, к столбцам результатов функции будет добавлен дополнительный столбец типа bigint. В этом столбце нумеруются строки набора результатов функции, начиная с 1.
Вы можете попробовать использовать
jsonb_each_text(jsonb)
который должен предоставлять как ключ, так и значение.
В этом вопросе есть пример: Извлечь ключ, значение из объектов json в Postgres, за исключением того, что вы будете использовать версию jsonb.