PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Matrizes multidimensionais do PostgreSQL


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: