PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Existe-t-il un moyen d'exécuter une requête à l'intérieur de la valeur de chaîne (comme eval) dans PostgreSQL ?

Si les instructions que vous essayez d'"évaluer" renvoient toujours le même type de données, vous pouvez écrire une fonction eval() qui utilise l'EXECUTE mentionné par 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

Ensuite, vous pourriez faire quelque chose comme

SELECT eval('select 41') + 1;

Mais cette approche ne fonctionnera pas si vos instructions dynamiques renvoient quelque chose de différent pour chaque expression que vous souhaitez évaluer.

Gardez également à l'esprit que cela ouvre un énorme risque de sécurité en exécutant des instructions arbitraires. Si c'est un problème, cela dépend de votre environnement. Si cela n'est utilisé que dans les sessions SQL interactives, ce n'est pas un problème.