sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Hay alguna forma de ejecutar una consulta dentro del valor de cadena (como eval) en PostgreSQL?

Si las declaraciones que intenta "evaluar" siempre devuelven el mismo tipo de datos, podría escribir una función eval() que use el EJECUTAR 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

Entonces podrías hacer algo como

SELECT eval('select 41') + 1;

Pero este enfoque no funcionará si sus declaraciones dinámicas devuelven algo diferente para cada expresión que desea evaluar.

También tenga en cuenta que esto abre un gran riesgo de seguridad al ejecutar declaraciones arbitrarias. Si eso es un problema depende de su entorno. Si eso solo se usa en sesiones SQL interactivas, entonces no es un problema.