Tablica Postgres elementy są zawsze elementami podstawowymi , czyli skalarny wartości. Tablice podrzędne nie są „elementami” w Postgresie. Plasterki tablicy zachowują oryginalne wymiary.
Możesz wyodrębnić element podstawowy , który jest wartością typu danych elementu skalarnego.
Możesz też wyodrębnić wycinek tablicy , który zachowuje oryginalny typ danych tablicy, a także oryginalne wymiary tablicy.
Twój pomysł na pobranie podtablicy jako „elementu” byłby z tym sprzeczny i po prostu nie został zaimplementowany.
Podręcznik może być jaśniejszy w wyjaśnieniu. Ale przynajmniej możemy znaleźć:
Twój pierwszy przykład próbuje odwołać się do elementu podstawowego, który nie został znaleziony (potrzebne byłyby dwa indeksy tablicy w tablicy 2-D). Więc Postgres zwraca NULL.
Twój trzeci przykład po prostu zawija wynikowy NULL w nową tablicę.
Aby spłaszczyć wycinek tablicy (uczyń go tablicą 1-D), możesz unnest()
i przekaż wynikowy zestaw do nowego ARRAY
konstruktor
. Albo w skorelowanym podzapytaniu, albo w LATERAL
dołącz (wymagana strona 9.3+). Demonstracja obu:
SELECT s.col[2:2][2:3] AS slice_arr
, x.lateral_arr
, ARRAY(SELECT unnest(s.col[2:2][2:3])) AS corr_arr
FROM (SELECT ARRAY[[1,2,3],[4,5,6]] AS col) s
, LATERAL (SELECT ARRAY(SELECT * FROM unnest(s.col[2:2][2:3])) AS lateral_arr) x;
I koniecznie przeczytaj aktualną wersję podręcznika . Twoje referencje wskazują na Postgres 9.1, ale są szanse, że faktycznie używasz Postgresa 9.4.
Powiązane: