prvky pole Postgres jsou vždy základní prvky , tedy skalární hodnoty. Dílčí pole nejsou „prvky“ v Postgresu. Řezy pole si zachovávají původní rozměry.
Můžete buď extrahovat základní prvek , což je hodnota datového typu skalárního prvku.
Nebo můžete extrahovat výseč pole , který zachová původní datový typ pole a také původní rozměry pole.
Váš nápad načíst dílčí pole jako „prvek“ by s tím byl v rozporu a není implementován.
Příručka může být ve svém vysvětlení jasnější. Ale alespoň můžeme najít:
Váš první příklad se pokusí odkazovat na základní prvek, který nebyl nalezen (ve 2D poli budete potřebovat dva indexy pole). Postgres tedy vrátí NULL.
Váš 3. příklad pouze zabalí výslednou hodnotu NULL do nového pole.
Chcete-li vyrovnat řez pole (udělejte z něj 1-D pole), můžete unnest()
a vložte výslednou sadu do nového ARRAY
konstruktor
. Buď v korelovaném dílčím dotazu nebo v LATERAL
připojit se (vyžaduje str. 9.3+). Předvedení obojího:
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;
A nezapomeňte si přečíst aktuální verzi příručky . vaše reference ukazují na Postgres 9.1, ale je pravděpodobné, že skutečně používáte Postgres 9.4.
Související: