Hello this function can help with array's iteration.
create function generate_iterator(anyarray) returns setof integer as $$ select i from generate_series(array_lower($1,1), array_upper($1,1)) g(i) $$ language sql; -- multidimensional create function generate_iterator(anyarray, integer) returns setof integer as $$ select generate_series(array_lower($1,$2), array_upper($1,$2)) g(i) $$ language sql; It can be internal function, not only shortcut for generate_series sample: create function array_sort(anyarray) returns anyarray as $$ select array(select $1[i] from generate_iterator($1) order by 1) $$ language sql; ---------------------------(end of broadcast)--------------------------- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match