【发布时间】:2012-09-03 11:15:07
【问题描述】:
这是我的(可能对你来说很常见)非优化解决方案:
内部函数未优化的 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-like 内部计数器在哪里?
注意1:上面的解决方案和问题与“how do you create an index by each element of an array?”不同。也与“Can PostgreSQL index array columns?”不同,因为该函数是针对独立数组的,而不是针对数组字段的表索引。
NOTE2(在回答后编辑):“数组索引”(更流行的术语)或“数组下标”或“数组计数器”是我们可以在语义路径中使用的术语来引用“内部计数器”,累加器下一个数组项。我看到 没有 PostgreSQL 命令 提供对这个计数器的直接访问。与generate_series() 函数一样,generate_subscripts() 函数是一个序列生成器,性能(最好但)几乎相同。另一方面,row_number() 函数提供对“行的内部计数器”的直接访问,但它与行有关,与数组无关,不幸的是性能更差。
【问题讨论】:
标签: arrays postgresql indexing