SQL возвращает SQL в качестве результата. Как мне запустить возвращенный SQL?

#sql #postgresql #dynamic-sql #crosstab

#sql #postgresql #dynamic-sql #перекрестная таблица

Вопрос:

использование метода перекрестных таблиц для динамического поворота hstore, который предлагается здесь. Есть ли какой-либо способ мгновенно запустить возвращенный sql или есть способ создать функцию, которая вызывала бы исходную перекрестную таблицу, а затем запускала sql для возврата сводной таблицы в качестве единственного результата вместо выполнения двух запросов?

итак, когда я запускаю этот запрос

     SELECT format(
   $s$SELECT * FROM crosstab(
     $$SELECT h.id, kv.*
       FROM   hstore_test h, each(hstore_col) kv
       ORDER  BY 1, 2$$
   , $$SELECT unnest(%L::text[])$$
   ) AS t(id int, %s text);
   $s$
 , array_agg(key)  -- escapes strings automatically
 , string_agg(quote_ident(key), ' text, ')  -- needs escaping!
   ) AS sql 
FROM  (
   SELECT DISTINCT key
   FROM   hstore_test, skeys(hstore_col) key
   ORDER  BY 1
   ) sub;
  

он возвращает результат, который выглядит следующим образом:

 SELECT * FROM crosstab(
     $$SELECT h.id, kv.*
       FROM   hstore_test h
       LEFT   JOIN LATERAL each(hstore_col) kv ON TRUE
       ORDER  BY 1, 2$$
   , $$SELECT unnest('{key1,key2,key3}'::text[])$$
   ) AS t(id int, key1 text, key2 text, key3 text);
  

то, что я хочу сделать, это либо с функцией, либо с другим запросом, обернутым вокруг первого. верните результаты второго запроса и используйте эти возвращенные данные для построения материализованного представления

Комментарии:

1. можете ли вы добавить дополнительную информацию в свой запрос, примерные данные и точную проблему

2. @AkhileshMishra готово

3. Вы могли бы использовать что-то вроде query_to_xml для запуска инструкции SQL. Или создать аналогичную функцию для возврата результата запроса в виде JSON

4. Если вы используете psql , вы могли бы использовать gexec