9.19. Функции и операторы для работы с массивами
В Таблице 9.51 показаны имеющиеся специальные операторы для типов-массивов. Кроме них для массивов определены обычные операторы сравнения, показанные в Таблице 9.1. Эти операторы сравнения сопоставляют содержимое массивов по элементам, используя при этом функцию сравнения для B-дерева, определённую для типа данного элемента по умолчанию, и упорядочивают их по первому различию. В многомерных массивах элементы просматриваются по строкам (индекс последней размерности меняется в первую очередь). Если содержимое двух массивов совпадает, а размерности отличаются, результат их сравнения будет определяться первым отличием в размерностях.
Таблица 9.51. Операторы для работы с массивами
Оператор Описание Пример(ы)  | 
|---|
 Первый массив содержит второй (имеется ли для каждого элемента второго массива равный ему в первом)? (Повторяющиеся элементы рассматриваются на общих основаниях, поэтому массивы  
  | 
 Первый массив содержится во втором? 
  | 
 Массивы пересекаются (у них есть общие элементы)? 
  | 
 Соединяет два массива. Если один из операндов — NULL или пустой массив, оператор никак не действует; в противном случае число размерностей массивов должно быть одинаковым (этот случай показан в первом примере) или могут отличаться на один (это иллюстрирует второй пример). Если это массивы не одинаковых типов элементов, они будут приведены к общему типу (см. Раздел 10.5). 
 
  | 
 Вставляет элемент в начало массива (массив должен быть пустым или одномерным). 
  | 
 Вставляет элемент в конец массива (массив должен быть пустым или одномерным). 
  | 
Подробнее поведение операторов с массивами описано в Разделе 8.15. За дополнительными сведениями об операторах, поддерживающих индексы, обратитесь к Разделу 11.2.
В Таблице 9.52 перечислены функции, предназначенные для работы с массивами. Дополнительная информация о них и примеры использования приведены в Разделе 8.15.
Таблица 9.52. Функции для работы с массивами
Функция Описание Пример(ы)  | 
|---|
  Добавляет элемент в конец массива (так же, как оператор  
  | 
  Соединяет два массива (так же, как оператор  
  | 
  Возвращает текстовое представление размерностей массива. 
  | 
  Возвращает массив, заполненный заданным значением и имеющий размерности, указанные во втором аргументе. В необязательном третьем аргументе могут быть заданы нижние границы для каждой размерности (по умолчанию  
 
  | 
  Возвращает длину указанной размерности массива. 
  | 
  Возвращает нижнюю границу указанной размерности массива. 
  | 
  Возвращает число размерностей массива. 
  | 
  Возвращает позицию первого вхождения второго аргумента в массиве либо  
  | 
  Возвращает массив позиций всех вхождений второго аргумента в одномерном массиве, заданном первым аргументом. Эта функция определяет равенство как  
  | 
  Вставляет элемент в начало массива (так же, как оператор  
  | 
  Удаляет из массива все элементы, равные заданному значению. Массив должен быть одномерным. Эта функция определяет равенство как  
  | 
  Заменяет каждый элемент массива, равный второму аргументу, значением третьего аргумента. 
  | 
  Представляет все элементы массива в виде текстовых строк и объединяет эти строки через разделитель, заданный параметром  
  | 
  Возвращает верхнюю границу указанной размерности массива. 
  | 
  Возвращает общее число элементов в массиве (0, если массив пуст). 
  | 
  Сокращает массив, удаляя последние  
  | 
  Разворачивает массив в набор строк. Элементы массива прочитываются в порядке хранения. 
 1 2 
 foo bar baz quux  | 
 Разворачивает массивы (возможно разных типов) в набор кортежей. Если массивы имеют разную длину, кортежи дополняются до большей длины значениями  
 a | b ---+----- 1 | foo 2 | bar | baz  | 
Примечание
В поведении string_to_array по сравнению с PostgreSQL версий до 9.1 произошли два изменения. Во-первых, эта функция возвращает пустой массив (содержащий 0 элементов), а не NULL, когда входная строка имеет нулевую длину. Во-вторых, если в качестве разделителя задан NULL, эта функция разбивает строку по символам, а не просто возвращает NULL, как было раньше.
Вы также можете узнать об агрегатной функции, работающей с массивами, array_agg в Разделе 9.21.