postgres: построить запрос выбора с использованием кросс-таблицы или любых функций json - PullRequest
0 голосов
/ 07 мая 2020
create table foo (i int, j text);

select table_schema, table_name, column_name , ordinal_position 
from information_schema.columns where table_name = 'foo';

Output

table_schema   table_name  column_name  ordinal_position
public         foo             i             1 
public         foo             j             2

Используя второй оператор, мне нужно сформировать запрос выбора select i, j from public.foo. Достаточно простой функции, если мы передадим имя таблицы, результатом может быть строка оператора выбора

1 Ответ

0 голосов
/ 07 мая 2020

Вы можете использовать агрегирование:

select concat_ws(' ',
    'select',
    string_agg(column_name, ', ' order by ordinal_position),
    'from',
    table_schema || '.' || table_name
) q
from information_schema.columns 
where table_name = 'foo'
group by table_schema, table_name

Или без предложения group by:

select concat_ws(' ',
    'select',
    string_agg(column_name, ', ' order by ordinal_position),
    'from',
    max(table_schema) || '.' || max(table_name)
) q
from information_schema.columns 
where table_name = 'foo' and table_schema = 'public'

Демонстрация на DB Fiddle :

| q                           |
| :-------------------------- |
| select i, j from public.foo |
...