elementi dell'array Postgres sono sempre elementi di base , ovvero scalare i valori. I sotto-array non sono "elementi" in Postgres. Le sezioni dell'array mantengono le dimensioni originali.
Puoi estrarre un elemento base , che è un valore del tipo di dati dell'elemento scalare.
Oppure puoi estrarre una fetta di matrice , che conserva il tipo di dati dell'array originale e anche le dimensioni dell'array originale.
La tua idea di recuperare un sottoarray come "elemento" sarebbe in conflitto con quello e semplicemente non è implementata.
Il manuale potrebbe essere più chiaro nella sua spiegazione. Ma almeno possiamo trovare:
Il tuo primo esempio tenta di fare riferimento a un elemento di base, che non viene trovato (avresti bisogno di due indici di array in un array 2-D). Quindi Postgres restituisce NULL.
Il tuo terzo esempio avvolge semplicemente il NULL risultante in un nuovo array.
Per appiattire una porzione di array (renderla un array 1-D) puoi unnest()
e invia il set risultante a un nuovo ARRAY
costruttore
. O in una sottoquery correlata o in un LATERAL
unisciti (richiede pag 9.3+). Dimostrando entrambi:
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;
E assicurati di leggere la versione attuale del manuale . i tuoi riferimenti puntano a Postgres 9.1, ma è probabile che tu stia effettivamente utilizzando Postgres 9.4.
Correlati: