我想访问jsonb数组中元素的索引,如下所示:
SELECT
jsonb_array_elements(data->'Steps') AS Step,
INDEX_OF_STEP
FROM my_process
为此,我在manual中看不到任何功能。 这可能吗?
答案 0 :(得分:2)
使用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. Table Functions):
如果指定了WITH ORDINALITY子句,则将bigint类型的附加列添加到函数结果列中。该列为函数结果集的行编号,从1开始。
答案 1 :(得分:1)
您可以尝试使用
jsonb_each_text(jsonb)
应同时提供键和值。
此问题有一个示例: Extract key, value from json objects in Postgres 除了您将使用jsonb版本。