具有计数器或索引值的 Postgres JSONB_ARRAY_ELEMENTS

Postgres JSONB_ARRAY_ELEMENTS with counter or index value

假设我有这个 order table,其中 widgets 列是一个 jsonb 数组:

order_no 小部件
50 [a,b,c]
51 [d,e,f]
select
  order_no,
  jsonb_array_elements_text(widgets) widget
from order;
order_no 小部件
50 一个
50 b
50 c
51 d
51 e
51 f

有没有办法让查询为 order 中的记录中的每个 jsonb 数组元素包含一个 increment/counter? (示例是从零开始的,但是从1开始查找...)

order_no 小部件 item_no
50 一个 0
50 b 1
50 c 2
51 d 0
51 e 1
51 f 2

您可以将函数调用移至FROM,然后添加WITH ORDINALITY。它基于 1,而不是基于 0,因此您必须减去 1。

select order_no, value as widget, ordinality-1 as item_no
from "order", jsonb_array_elements_text(widgets) with ordinality;

您不应使用“order”作为 table 名称,因为它是一个保留字。你可以把它放在引号里,但这仍然是个坏主意。