В PostgreSQL вы можете использовать результат одного SELECT-запроса в качестве названия колонок для другого SELECT-запроса, используя конструкцию с помощью оператора EXECUTE.
Для начала, давайте предположим, что у нас есть 2 таблицы - "table1" и "table2". Мы хотим выбрать все строки из "table1", а затем использовать результаты этого запроса в качестве названий колонок для выборки данных из "table2".
Вот как можно сделать это:
DO $$ DECLARE column_names text; query text; BEGIN -- Получаем названия колонок из table1 SELECT string_agg(column_name, ',') INTO column_names FROM information_schema.columns WHERE table_name = 'table1'; -- Формируем запрос на выборку данных из table2 query := 'SELECT ' || column_names || ' FROM table2'; -- Выполняем запрос EXECUTE query; END $$
В этом коде мы используем функцию string_agg для слияния всех названий колонок из таблицы "table1" в одну строку, разделенную запятыми.
Затем мы формируем итоговый запрос на выборку данных из "table2", вставляя ранее полученную строку с названиями колонок в соответствующую позицию в запросе с помощью оператора || (конкатенация строк).
Наконец, мы выполняем сформированный запрос с помощью оператора EXECUTE.
Таким образом, результаты первого SELECT-запроса используются как названия колонок для второго SELECT-запроса, и эти данные выводятся. Обратите внимание, что результаты SELECT-запроса возвращаются только внутри блока кода DO, и их можно использовать для дальнейшей обработки или вывода.