В чём проблема получения таблицы с данными по запросу SELECT?
У нас есть таблица с доменными именами.
Мы знаем как отобрать нужные нам ЗАПИСИ из этой таблицы в виде ТАБЛИЦЫ.
Пример SQL-запроса в PostgreSQL:
SELECT * FROM a.t_dname WHERE dname LIKE '%.tumblr' LIMIT 5;
Результат работы запроса:
Мы также знаем как нам отобрать только ЗАПИСИ столбца идентификаторов.
Пример SQL-запроса в PostgreSQL:
SELECT id FROM a.t_dname WHERE dname LIKE '%.tumblr' LIMIT 5;
Результат работы запроса:
Но как нам получить все эти идентификаторы в виде МАССИВА, а не ТАБЛИЦЫ?
Решение
В PostgreSQL есть возможность создать массив из таблицы. То есть, возможно создать массив из результатов подзапроса SELECT.
Для этого нужно написать ключевое слово ARRAY и после него в круглых скобках ( ) записать сам подзапрос SELECT.
Пример SQL-запроса создания массива из таблицы в PostgreSQL:
SELECT ARRAY(SELECT id FROM a.t_dname WHERE dname LIKE '%.tumblr' LIMIT 5);
Результат работы запроса:
Обратите внимание, что МАССИВ в PostgreSQL визуально отображается в фигурных скобках, хотя по факту должны быть квадратные скобки, как в любом нормальном языке программирования.
Мы получили массив с типом данных bigint и теперь можем использовать его для дальнейшей обработки в функции.
В чём проблема?
Единственный недостаток этого способа заключается в том, что мы при помощи ПОДЗАПРОСА можем получить МАССИВ только на основании ОДНОГО столбца ТАБЛИЦЫ.
Это значит, что массив будет одноуровневый — все элементы одного типа будут находиться на одном уровне вложенности массива. Из подзапроса нельзя сделать глубокий массив, который например возвращал бы нам пары значений (или тройки, ну и так далее)
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Раздел «4.2.12. Конструкторы массивов» — https://postgrespro.ru/docs/postgresql/14/sql-expressions#SQL-SYNTAX-ARRAY-CONSTRUCTORS
Оператор LIKE — https://postgrespro.ru/docs/postgresql/14/functions-matching#FUNCTIONS-LIKE