PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Matrici multidimensionali PostgreSQL

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: