「eval」しようとしているステートメントが常に同じデータ型を返す場合は、Grzegorzが言及したEXECUTEを使用するeval()関数を作成できます。
create or replace function eval(expression text) returns integer
as
$body$
declare
result integer;
begin
execute expression into result;
return result;
end;
$body$
language plpgsql
次に、
のようなことを行うことができますSELECT eval('select 41') + 1;
ただし、動的ステートメントが、評価する式ごとに異なるものを返す場合、このアプローチは機能しません。
また、これにより、任意のステートメントを実行することにより、セキュリティ上の大きなリスクが発生することにも注意してください。それが問題であるかどうかは、環境によって異なります。それがインタラクティブSQLセッションでのみ使用される場合、問題はありません。