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: