Как выбрать подмножество массива в Postgres?

Предполагая, что у меня есть массив в одном из столбцов postgres:

> select array[1,2,3,4];
   array   
-----------
 {1,2,3,4} 

Как выбрать подмножество элементов из этого массива в целом? Например, если я хочу выбрать элементы из индекса x в индекс y, как бы я захватил элементы в этом диапазоне (x до y)?

Я использую PostgreSQL 9.4.

Ответ 1

Из прекрасного руководства:

8.15.3. Доступ к массивам
[...]
Мы также можем получить доступ к произвольным прямоугольным фрагментам массива или подмассивам. Срез массива обозначается записью нижней границы: верхней границы для одного или нескольких измерений массива.
[...]
Можно опустить нижнюю и/или верхнюю границу спецификатора среза; отсутствующая граница заменяется нижним или верхним пределом индексов массива.

Например:

=> select (array[1,2,3,4,5,6])[2:5];
   array   
-----------
 {2,3,4,5}
(1 row)

=> select (array[1,2,3,4,5,6])[:5];
    array    
-------------
 {1,2,3,4,5}
(1 row)

=> select (array[1,2,3,4,5,6])[2:];
    array    
-------------
 {2,3,4,5,6}
(1 row)

=> select (array[1,2,3,4,5,6])[:];
     array     
---------------
 {1,2,3,4,5,6}
(1 row)

Таким образом, чтобы получить фрагмент от индекса x до y (включительно), вы бы сказали:

array_column[x:y]