Tableau Postgres éléments sont toujours des éléments de base , c'est-à-dire scalaire valeurs. Les sous-tableaux ne sont pas des "éléments" dans Postgres. Les tranches de tableau conservent leurs dimensions d'origine.
Vous pouvez soit extraire un élément de base , qui est une valeur du type de données d'élément scalaire.
Vous pouvez également extraire une tranche de tableau , qui conserve le type de données du tableau d'origine ainsi que les dimensions du tableau d'origine.
Votre idée de récupérer un sous-tableau en tant qu'"élément" serait en conflit avec cela et n'est tout simplement pas implémentée.
Le manuel pourrait être plus clair dans son explication. Mais au moins, nous pouvons trouver :
Votre 1er exemple essaie de référencer un élément de base, qui n'est pas trouvé (vous auriez besoin de deux index de tableau dans un tableau 2-D). Donc Postgres renvoie NULL.
Votre 3ème exemple enveloppe simplement le NULL résultant dans un nouveau tableau.
Pour aplatir une tranche de tableau (en faire un tableau 1-D), vous pouvez unnest()
et alimentez l'ensemble résultant à un nouveau ARRAY
constructeur
. Soit dans une sous-requête corrélée, soit dans un LATERAL
joindre (nécessite pg 9.3+). Démonstration des deux :
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;
Et assurez-vous de lire la version actuelle du manuel . vos références pointent vers Postgres 9.1, mais il y a de fortes chances que vous utilisiez réellement Postgres 9.4.
Connexe :
- Comment sélectionner un tableau 1d à partir d'un tableau 2d postgresql
- Désimbriquer le tableau d'un niveau