Unnest multidimensional array

From PostgreSQL wiki
Jump to navigationJump to search

Library Snippets

Unnest a multidimensional array

Works with PostgreSQL

9.1+

Written in

SQL

Depends on

Nothing


Purpose: To emulate the unnest functionality for a multi-dimensional array. Courtesy of Pavel Stehule, from unnest on multi-dimensional arrays

NOTE: This will not work on an array of more than 2 dimensions. For an idea on how to handle multiple dimensions, take a look at Multidimensional Array Mapping

Function

CREATE OR REPLACE FUNCTION public.reduce_dim(anyarray)
RETURNS SETOF anyarray AS
$function$
DECLARE
    s $1%type;
BEGIN
    FOREACH s SLICE 1  IN ARRAY $1 LOOP
        RETURN NEXT s;
    END LOOP;
    RETURN;
END;
$function$
LANGUAGE plpgsql IMMUTABLE;


select reduce_dim(array[array[1, 2], array[2, 3], array[4,5], array[9,10]]);
 reduce_dim
------------
 {1,2}
 {2,3}
 {4,5}
 {9,10}