Доступ к индексу элемента в массиве jsonb - PullRequest
0 голосов
/ 27 июня 2018

Я хотел бы получить доступ к индексу элемента в массиве jsonb, например:

SELECT
  jsonb_array_elements(data->'Steps') AS Step,
  INDEX_OF_STEP

FROM my_process

Я не вижу никакой функции в руководстве для этого. Это как-то возможно?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Использование 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.

0 голосов
/ 27 июня 2018

Вы можете попробовать использовать

jsonb_each_text(jsonb)

, который должен предоставить ключ и значение.

В этом вопросе есть пример: Извлечение ключа, значения из объектов json в Postgres за исключением того, что вы будете использовать версию JSONB.

...