sql >> Base de Datos >  >> RDS >> PostgreSQL

Matrices multidimensionales de PostgreSQL

Matriz Postgres elementos son siempre elementos base , es decir, escalar valores. Los subconjuntos no son "elementos" en Postgres. Los segmentos de la matriz conservan las dimensiones originales.

Puede extraer un elemento base , que es un valor del tipo de datos de elemento escalar.
O puede extraer un segmento de matriz , que conserva el tipo de datos de la matriz original y también las dimensiones de la matriz original.

Su idea de recuperar un subarreglo como "elemento" entraría en conflicto con eso y simplemente no está implementada.

El manual puede ser más claro en su explicación. Pero al menos podemos encontrar:

Tu primer ejemplo intenta hacer referencia a un elemento base, que no se encuentra (necesitaría dos índices de matriz en una matriz 2-D). Entonces Postgres devuelve NULL.
Tu tercer ejemplo simplemente envuelve el NULL resultante en una nueva matriz.

Para aplanar un segmento de matriz (que sea una matriz 1-D) puede unnest() y alimente el conjunto resultante a un nuevo ARRAY constructor . Ya sea en una subconsulta correlacionada o en un LATERAL unirse (requiere pg 9.3+). Demostrando ambos:

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;

Y asegúrese de leer la versión actual del manual . sus referencias apuntan a Postgres 9.1, pero lo más probable es que en realidad esté usando Postgres 9.4.

Relacionado: