Postgres масив елементи са винаги основни елементи , т.е. скаларен стойности. Подмасивите не са "елементи" в Postgres. Срезовете на масива запазват оригиналните размери.
Можете или да извлечете базов елемент , което е стойност от типа данни на скаларния елемент.
Или можете да извлечете срез от масив , който запазва оригиналния тип данни на масива, както и оригиналните измерения на масива.
Вашата идея да извлечете подмасив като "елемент" би била в конфликт с това и просто не е приложена.
Ръководството може да е по-ясно в обяснението си. Но поне можем да намерим:
Вашият първи пример се опитва да посочи базов елемент, който не е намерен (ще ви трябват два индекса на масив в 2-D масив). Така Postgres връща NULL.
Вашият трети пример просто обвива получената NULL в нов масив.
За сплескване срез от масив (направете го 1-D масив) можете да unnest()
и захранете получения набор към нов ARRAY
конструктор
. Или в корелирана подзаявка, или в LATERAL
присъединете се (изисква pg 9.3+). Демонстриране и на двете:
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;
И не забравяйте да прочетете текущата версия на ръководството . препратките ви сочат към Postgres 9.1, но има вероятност всъщност да използвате Postgres 9.4.
Свързани:
- Как да изберете 1d масив от 2d масив postgresql
- Разместете масива с едно ниво