PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Existe alguma maneira de executar uma consulta dentro do valor da string (como eval) no PostgreSQL?


Se as instruções que você está tentando "eval" sempre retornarem o mesmo tipo de dados, você pode escrever uma função eval() que use o EXECUTE mencionado por Grzegorz.
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

Então você poderia fazer algo como
SELECT eval('select 41') + 1;

Mas essa abordagem não funcionará se suas instruções dinâmicas retornarem algo diferente para cada expressão que você deseja avaliar.

Lembre-se também de que isso abre um enorme risco de segurança ao executar instruções arbitrárias. Se isso é um problema depende do seu ambiente. Se isso for usado apenas em sessões SQL interativas, não será um problema.