Matriz Postgres elementos são sempre elementos básicos , ou seja, escalar valores. Sub-arrays não são "elementos" no Postgres. As fatias de matriz mantêm as dimensões originais.
Você pode extrair um elemento base , que é um valor do tipo de dados do elemento escalar.
Ou você pode extrair uma fatia de matriz , que retém o tipo de dados da matriz original e também as dimensões da matriz original.
Sua ideia de recuperar uma sub-matriz como "elemento" entraria em conflito com isso e simplesmente não foi implementada.
O manual pode ser mais claro em sua explicação. Mas pelo menos podemos encontrar:
Seu primeiro exemplo tenta referenciar um elemento base, que não foi encontrado (você precisaria de dois índices de array em um array 2-D). Então o Postgres retorna NULL.
Seu terceiro exemplo apenas envolve o NULL resultante em uma nova matriz.
Para achatar uma fatia de matriz (torne-a uma matriz 1-D) você pode
unnest()
e alimente o conjunto resultante para um novo ARRAY
construtor
. Seja em uma subconsulta correlacionada ou em um LATERAL
juntar (requer página 9.3+). Demonstrando 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;
E não deixe de ler a versão atual do manual . suas referências apontam para o Postgres 9.1, mas é provável que você esteja realmente usando o Postgres 9.4.
Relacionado: