Postgres array elementer er altid basiselementer , dvs. skalær værdier. Underarrays er ikke "elementer" i Postgres. Array-skiver bevarer oprindelige dimensioner.
Du kan enten udtrække et basiselement , som er en værdi af datatypen skalarelement.
Eller du kan udtrække et matrixudsnit , som bevarer den oprindelige matrixdatatype og også originale matrixdimensioner.
Din idé om at hente et underarray som "element" ville være i konflikt med det og er bare ikke implementeret.
Manualen er muligvis klarere i sin forklaring. Men vi kan i det mindste finde:
Dit første eksempel forsøger at referere til et basiselement, som ikke findes (du skal bruge to array-indekser i et 2-D-array). Så Postgres returnerer NULL.
Dit 3. eksempel pakker blot den resulterende NULL i et nyt array.
For at flade ud et array-udsnit (gør det til et 1-D-array) kan du unnest()
og foder det resulterende sæt til en ny ARRAY
konstruktør
. Enten i en korreleret underforespørgsel eller i en LATERAL
join (kræver side 9.3+). Demonstrerer begge dele:
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;
Og sørg for at læse den aktuelle version af manualen . dine referencer peger på Postgres 9.1, men chancerne er, at du faktisk bruger Postgres 9.4.
Relateret: