Как использовать результат одного SELECTа в качестве названия колонок для другого SELECTа?

В 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, и их можно использовать для дальнейшей обработки или вывода.