这是我的(也许对你来说很常见)未优化的解决方案:
未优化内部函数的 PG 问题的解决方法:
CREATE FUNCTION unnest_with_idx(anyarray)
RETURNS TABLE(idx integer, val anyelement) AS
$$
SELECT generate_series(1,array_upper($1,1)) as idx, unnest($1) as val;
$$ LANGUAGE SQL IMMUTABLE;
测试:
SELECT idx,val from unnest_with_idx(array[1,20,3,5]) as t;
但是,正如我所说,未优化的. 我不敢相信(!!)PostgreSQL 没有数组的内部索引......?但是在这种情况下,问题是如何直接访问这个索引,在哪里有类似 GIN 的内部计数器?
NOTE1:上面的解决方案和问题与“如何为数组的每个元素创建索引? ”不同。也与“可以 PostgreSQL 索引数组列吗? ”不同,因为该函数是针对独立数组的,而不是针对数组字段的表索引。
注意2(在回答后编辑):“数组索引”(更流行的术语)或“数组下标”或“数组计数器”是我们可以在语义路径中使用的术语,以将“内部计数器”、累加器指向下一个数组物品。我看到没有 PostgreSQL 命令提供对这个计数器的直接访问。作为generate_series()
函数,该generate_subscripts()
函数是一个序列生成器,性能(最好但)几乎相同。另一方面row_number()
,函数提供了对“行的内部计数器”的直接访问,但它是关于行的,而不是关于数组的,不幸的是性能更差。