Postgres-array elementen zijn altijd basiselementen , d.w.z. scalair waarden. Sub-arrays zijn geen "elementen" in Postgres. Array-plakjes behouden de oorspronkelijke afmetingen.
Je kunt een basiselement extraheren , wat een waarde is van het gegevenstype scalaire elementen.
Of u kunt een matrixsegment extraheren , die het originele array-gegevenstype en ook de originele array-afmetingen behoudt.
Jouw idee om een sub-array als "element" op te halen zou daarmee in strijd zijn en is gewoon niet geïmplementeerd.
De handleiding is misschien duidelijker in zijn uitleg. Maar we kunnen in ieder geval vinden:
Uw eerste voorbeeld probeert te verwijzen naar een basiselement dat niet wordt gevonden (je hebt twee array-indexen nodig in een 2D-array). Dus Postgres retourneert NULL.
Uw 3e voorbeeld wikkelt de resulterende NULL gewoon in een nieuwe array.
afvlakken een array slice (maak er een 1-D array van) kunt u unnest()
en voer de resulterende set naar een nieuwe ARRAY
constructeur
. Ofwel in een gecorreleerde subquery of in een LATERAL
join (vereist pagina 9.3+). Beide demonstreren:
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;
En zorg ervoor dat u de huidige versie van de handleiding leest . uw referenties verwijzen naar Postgres 9.1, maar de kans is groot dat u Postgres 9.4 daadwerkelijk gebruikt.
Gerelateerd: