Развернуть массив на один уровень

Я хочу взять массив размеров n и вернуть набор, содержащий строки массивов размеров n-1 . Например, возьмите массив ARRAY [[1,2,3], [4,5,6], [7,8,9]] и верните набор {1,2, 3}, {4,5,6}, {7,8,9} .Использование unnest возвращает набор 1,2,3,4,5,6,7,8,9 .

Я попытался получить unnest-функцию из PostgreSQL 8.4, которая, похоже, сделает то, что я ищу:

CREATE OR REPLACE FUNCTION tstng.unnest2(anyarray)
    RETURNS SETOF anyelement
    LANGUAGE plpgsql
    IMMUTABLE
    AS $$
    BEGIN
            RETURN QUERY SELECT $1[i]
                FROM generate_series(array_lower($1,1), array_upper($1,1)) i;
        END;
    $$;

Однако SELECT tstng.unnest2 (ARRAY [[1,2,3], [ 4,5,6], [7,8,9]]); возвращает набор ,, (т.е. 3 пустые строки).

Я также обнаружил, что SELECT (ARRAY [[1,2,3], [4,5,6], [7,8,9]]) [0]; возвращает null , что я считаю корнем моей проблемы.

11
задан Erwin Brandstetter 23 September 2014 в 14:18
поделиться