PostgreSQL | Как дописать новый элемент в конец массива?

PostgreSQL | Как дописать новый элемент в конец массива?

В объектно-ориентированных языках типа JavaScript существуют встроенные классы со своими конструкторами. Когда из конструктора класса рождается новый объект, то он наследует все свойства экземпляра класса. Так в JS все массивы имеют унаследованный метод push(), который тупо делает вставку нового значения в конец массива, на котором был вызван.

В случае с PostgreSQL нужно изобретать велосипед т. к. встроенных методов в нём нет. В PostgreSQL существует понятие «Объекта Базы Данных», но это про другие объекты — не про те что нас интересуют.

Что делать?

 

Решение

— Как дописать элемент в конец массива в PostgreSQL?

 

DO $$

DECLARE

     — При объявлении массива дописываем квадратные скобки после типа данных

    arr integer[];

BEGIN  

 

    RAISE NOTICE ‘Присваиваем переменной a массив из двух элементов через оператор ARRAY’;

    arr := ARRAY[10,20];

    RAISE NOTICE ‘Массив ДО конкатенации%’, arr; — При выводе в консоль оформляется фигурными скобками

   

    RAISE NOTICE ‘Конкатенируем новый элемент с массивом’;

    arr := arr||30;

    RAISE NOTICE ‘Массив ПОСЛЕ конкатенации%’, arr;

   

END;

$$

LANGUAGE plpgsql;

 

Для простоты показа работоспособности мы используем оператор DO. И вместо вывода данных из функции мы просто выводим в консоль промежуточные результаты при помощи команды RAISE NOTICE.

Ключевое выражение здесь:

arr := arr||30;

Мы тупо конкатенируем || существующий массив из элементов с числовым значением 30 и потом переписываем сам идентификатор привязки arr при помощи присваивания в виде двоеточия и знака равенства — :=

PostgreSQL каким-то магическим образом понимает куда нужно подпихнуть эту тридцаточку. Положение целого числа 30 относительно двух вертикальных линий || здесь важно. Если слева от || записать 30, а потом arr, то новый элемент добавится в начало массива. В таком случае произойдёт сдвиг элементов. Это может быть критически важно, если будут склеиваться несколько массивов в один табличный результат.

 

Результат работы оператора DO при дописывании нового элемента в конец массива в PostgreSQL

Дописали целое число в конец массива в PostgreSQL и вывели весь новый массив в консоль
Дописали целое число в конец массива в PostgreSQL и вывели весь новый массив в консоль

В веб-интерфейсе pgAdmin 4 хорошо видно, как шло добавление нового элемента в конец существующего массива. Каждый шаг выполнения мы выводили в консоль «Messages» в виде замечания «NOTICE«.

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Раздел «Функции и операторы для работы с массивами» — https://postgrespro.ru/docs/postgresql/15/functions-array