Функции и операторы для массивов

В Таблице 51 приведены специальные операторы, имеющиеся для типов массивов. Кроме них для массивов имеются обычные операторы сравнения, перечисленные в таблице Операторы сравнения. Эти операторы сравнения сопоставляют содержимое массивов поэлементно, используя функцию сравнения для B-дерева, определенную для типа данных этого элемента по умолчанию, и сортируют по принципу первого различия. В многомерных массивах элементы просматриваются в построчном порядке (последний индекс меняется в первую очередь). Если содержимое двух массивов одинаково, но размерности отличаются, порядок сортировки определяется первым отличием в информации о размерности.

Таблица 51. Операторы для массивов

Оператор
Описание
Пример(ы)
anyarray @> anyarray → boolean
Первый массив содержит второй, то есть каждый элемент, находящийся во втором массиве, равен какому-либо элементу первого? (Дубликаты обрабатываются на общих основаниях, поэтому массивы ARRAY[1] и ARRAY[1,1] считаются содержащими друг друга.)
ARRAY[1,4,3] @> ARRAY[3,1,3] → t
anyarray <@ anyarray → boolean
Первый массив содержится во втором?
ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6] → t
anyarray && anyarray → boolean
Массивы пересекаются, то есть имеют какие-либо общие элементы?
ARRAY[1,4,3] && ARRAY[2,1] → t
anycompatiblearray || anycompatiblearray → anycompatiblearray
Конкатенирует два массива. Со значениями NULL или пустыми массивами эта операция не проводится; в иных случаях массивы должны иметь одинаковое число размерностей (как показано в первом примере) или отличаться на одну размерность (как показано во втором примере). Если эти массивы не одинаковых типов элементов, они будут приведены к общему типу (см. раздел UNION, CASE и связанные конструкции).
ARRAY[1,2,3] || ARRAY[4,5,6,7] → {1,2,3,4,5,6,7}
ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9.9]] → {{1,2,3},{4,5,6},{7,8,9.9}}
anycompatible || anycompatiblearray → anycompatiblearray
Конкатенирует элемент с началом массива (который должен быть пустым или одномерным).
3 || ARRAY[4,5,6] → {3,4,5,6}
anycompatiblearray || anycompatible → anycompatiblearray
Конкатенирует элемент с концом массива (который должен быть пустым или одномерным).
ARRAY[4,5,6] || 7 → {4,5,6,7}

Более подробную информацию о поведении операторов для массивов см. в разделе Массивы. Более подробную информацию о том, какие операторы поддерживают операции с индексами, см. в разделе Типы индексов.

В Таблице 52 приведены имеющиеся функции для использования с типами массивами. Дополнительную информацию и примеры использования этих функций см. в разделе Массивы.

Таблица 52. Функции для массивов

Функция
Описание
Пример(ы)
array_append ( anycompatiblearray, anycompatible ) → anycompatiblearray
Добавляет элемент в конец массива (так же, как оператор anycompatiblearray || anycompatible).
array_append(ARRAY[1,2], 3) → {1,2,3}
array_cat ( anycompatiblearray, anycompatiblearray ) → anycompatiblearray
Конкатенирует два массива (так же, как оператор anycompatiblearray || anycompatiblearray).
array_cat(ARRAY[1,2,3], ARRAY[4,5]) → {1,2,3,4,5}
array_dims ( anyarray ) → text
Возвращает текстовое представление размерностей массива.
array_dims(ARRAY[[1,2,3], [4,5,6]]) → [1:2][1:3]
array_fill ( anyelement, integer[] [, integer[] ] ) → anyarray
Возвращает массив, заполненный копиями заданного значения и имеющий размерности той длины, которая указана во втором аргументе. Необязательный третий аргумент предоставляет значения нижней границы для каждой размерности (по умолчанию все они равны 1).
array_fill(11, ARRAY[2,3]) → {{11,11,11},{11,11,11}}
array_fill(7, ARRAY[3], ARRAY[2]) → [2:4]={7,7,7}
array_length ( anyarray, integer ) → integer
Возвращает длину запрошенной размерности массива.
array_length(array[1,2,3], 1) → 3
array_lower ( anyarray, integer ) → integer
Возвращает нижнюю границу запрошенной размерности массива.
array_lower('[0:2]={1,2,3}'::integer[], 1) → 0
array_ndims ( anyarray ) → integer
Возвращает количество размерностей массива.
array_ndims(ARRAY[[1,2,3], [4,5,6]]) → 2
array_position ( anycompatiblearray, anycompatible [, integer ] ) → integer
Возвращает индекс первого вхождения второго аргумента в массиве или NULL, если таковой отсутствует. Если задан третий аргумент, поиск начинается с этого индекса. Массив должен быть одномерным. Сравнения производятся с применением семантики IS NOT DISTINCT FROM, что позволяет искать значения NULL.
array_position(ARRAY['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'mon') → 2
array_positions ( anycompatiblearray, anycompatible ) → integer[]
Возвращает массив индексов всех вхождений второго аргумента в массиве, заданном в первом аргументе. Массив должен быть одномерным. Сравнения производятся с применением семантики IS NOT DISTINCT FROM, что позволяет искать значения NULL. NULL возвращается, только массив равен NULL; если заданное значение отсутствует в массиве, возвращается пустой массив.
array_positions(ARRAY['A','A','B','A'], 'A') → {1,2,4}
array_prepend ( anycompatible, anycompatiblearray ) → anycompatiblearray
Добавляет элемент в начало массива (так же, как оператор anycompatible || anycompatiblearray).
array_prepend(1, ARRAY[2,3]) → {1,2,3}
array_remove ( anycompatiblearray, anycompatible ) → anycompatiblearray
Удаляет из массива все элементы, равные заданному значению. Массив должен быть одномерным. Сравнения производятся с применением семантики IS NOT DISTINCT FROM, что позволяет удалять значения NULL.
array_remove(ARRAY[1,2,3,2], 2) → {1,3}
array_replace ( anycompatiblearray, anycompatible, anycompatible ) → anycompatiblearray
Заменяет каждый элемент массива, равный второму аргументу, значением третьего аргумента.
array_replace(ARRAY[1,2,5,4], 5, 3) → {1,2,3,4}
array_to_string ( массив anyarray, разделитель text [, нулевая_строка text ] ) → text
Преобразует каждый элемент массива в текстовое представление и конкатенирует те из них, что разделены строкой-разделителем. Если задана нулевая_строка и она отлична от NULL, то эта строка представляет содержащиеся в массиве записи NULL; в противном случае такие записи опускаются.
array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') → 1,2,3,*,5
array_upper ( anyarray, integer ) → integer
Возвращает верхнюю границу запрошенной размерности массива.
array_upper(ARRAY[1,8,3,7], 1) → 4
cardinality ( anyarray ) → integer
Возвращает общее количество элементов в массиве или 0, если это пустой массив.
cardinality(ARRAY[[1,2],[3,4]]) → 4
trim_array ( массив anyarray, n integer ) → anyarray
Усекает массив, удаляя последние n элементов. Если массив многомерный, усекается только первая размерность.
trim_array(ARRAY[1,2,3,4,5,6], 2) → {1,2,3,4}
unnest ( anyarray ) → setof anyelement
Разворачивает массив в набор строк. Элементы массива прочитываются в порядке хранения.
unnest(ARRAY[1,2]) →
     1
     2
unnest(ARRAY[['foo','bar'],['baz','quux']]) →
     foo
     bar
     baz
     quux
unnest ( anyarray, anyarray [, ... ] ) → setof anyelement, anyelement [, ... ]
Разворачивает несколько массивов (возможно, разных типов данных) в набор строк. Если у массивов неодинаковая длина, то более короткие заполняются значениями NULL. Эта форма допускается только в предложении FROM; см. подраздел Табличные функции.
select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b) →
     a |  b
    ---+-----
     1 | foo
     2 | bar
       | baz

Описание работающей с массивами функции array_agg см. в разделе Агрегатные функции.