9.19. Функции и операторы для работы с массивами
В Таблице 9.51 показаны имеющиеся специальные операторы для типов-массивов. Кроме них для массивов определены обычные операторы сравнения, показанные в Таблице 9.1. Эти операторы сравнения сопоставляют содержимое массивов по элементам, используя при этом функцию сравнения для B-дерева, определённую для типа данного элемента по умолчанию, и упорядочивают их по первому различию. В многомерных массивах элементы просматриваются по строкам (индекс последней размерности меняется в первую очередь). Если содержимое двух массивов совпадает, а размерности отличаются, результат их сравнения будет определяться первым отличием в размерностях. (В PostgreSQL до версии 8.2 поведение было другим: два массива с одинаковым содержимым считались одинаковыми, даже если число их размерностей и границы индексов различались.)
Таблица 9.51. Операторы для работы с массивами
| Оператор Описание Пример(ы) | 
|---|
| 
 Первый массив содержит второй (имеется ли для каждого элемента второго массива равный ему в первом)? (Повторяющиеся элементы рассматриваются на общих основаниях, поэтому массивы  
 | 
| 
 Первый массив содержится во втором? 
 | 
| 
 Массивы пересекаются (у них есть общие элементы)? 
 | 
| 
 Соединяет два массива. Если один из операндов — NULL или пустой массив, оператор никак не действует; в противном случае число размерностей массивов должно быть одинаковым (этот случай показан в первом примере) или могут отличаться на один (это иллюстрирует второй пример). 
 
 | 
| 
 Вставляет элемент в начало массива (массив должен быть пустым или одномерным). 
 | 
| 
 Вставляет элемент в конец массива (массив должен быть пустым или одномерным). 
 | 
Подробнее поведение операторов с массивами описано в Разделе 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.