Можно ли вложить оператор EXECUTE в качестве исходного набора записей в PostgreSQL? - PullRequest
0 голосов
/ 13 июля 2020

Это случай динамического c _sql select, переданного функции, которая пытается выполнить запрос и вернуть массив JSON с результатом.

create or replace function jlist_objects_bysql (
  _sql  varchar
)
returns json
as $$
  select
    json_agg (t)
  from (
    execute _sql
  ) as t;
$$ language sql;

Ошибка проверки в PostgreSQL 12 это

psql:objects_procedures.sql:874: ERROR:  syntax error at or near "t"
LINE 8:   from execute _sql t;

1 Ответ

1 голос
/ 13 июля 2020

Dynami c SQL не работает с language sql, а работает с language plpgsql.

Затем вы можете увеличить динамический c запрос

create or replace function jlist_objects_bysql (
  _sql  varchar
)
returns json
as $$
declare
    output json;
BEGIN
 execute 'select json_agg (t) from (   ' || _sql || '
  ) as t;'
  INTO output;
  
  return output;
END
$$ language plpgsql;


select jlist_objects_bysql('select * from test');
...