数组 – 如何使用postgreSQL访问数组内部索引?
这是我(也许通常适合你)的非优化解决方案:
使用非优化内部函数的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()函数提供了对“行内部计数器”的直接访问,但它是关于行,而不是关于数组,不幸的是性能更差.
PostgreSQL确实为
generate array subscripts提供了专用功能:
WITH x(a) AS ( VALUES ('{1,5}'::int[]) ) SELECT generate_subscripts(a,1) AS idx,unnest(a) AS val FROM x; 实际上它与@Frank的查询几乎相同,只是没有子查询. 这两种解决方案都只适用于一维数组! (可以轻松扩展到多个维度.) 功能: CREATE OR REPLACE FUNCTION unnest_with_idx(anyarray) RETURNS TABLE(idx integer,val anyelement) LANGUAGE SQL IMMUTABLE AS $func$ SELECT generate_subscripts($1,1),unnest($1); $func$; 呼叫: SELECT * FROM unnest_with_idx('{1,5}'::int[]); 还要考虑: SELECT * FROM unnest_with_idx('[4:7]={1,5}'::int[]); 有关this related question中数组下标的更多信息. 如果你真的想要标准化的下标(从1开始),我会使用: SELECT generate_series(1,array_length($1,1)) ... 这几乎是你已经拥有的查询,只是使用 性能 我对1000 int的数组进行了快速测试,目前为止所有查询都在这里.它们都执行大约相同的(~3.5 ms) – 除了子查询上的row_number()(~7,5 ms) – 正如预期的那样,因为子查询. 更新:Postgres 9.4 除非您使用非标准索引下标,否则请使用新的WITH ORDINALITY: > PostgreSQL unnest() with element number (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- postgresql – 撤消对角色的postgres数据库的访问
- configure: error: XML configuration could not
- ruby-on-rails – 如何在Rails中删除通配符cooki
- ruby-on-rails – 如何从Rspec输出中禁用http日志
- WPF基础到企业应用系列7――深入剖析依赖属性(五
- NSJSONSerialization-JSON数据与NSDictionary和N
- FILE *和int值fd之间有什么区别/关系?
- Jmeter如何把响应数据的结果保存到本地的一个文件
- CocoStudio Lua(lua)动画调用 导出的基本动画播
- c – unordered_map与自定义哈希/相等的功能 –