PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

C'è un modo per eseguire una query all'interno del valore della stringa (come eval) in PostgreSQL?

Se le istruzioni che stai cercando di "valutare" restituiscono sempre lo stesso tipo di dati, puoi scrivere una funzione eval() che utilizza EXECUTE menzionato da 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

Quindi potresti fare qualcosa come

SELECT eval('select 41') + 1;

Ma questo approccio non funzionerà se le tue istruzioni dinamiche restituiscono qualcosa di diverso per ogni espressione che vuoi valutare.

Tieni inoltre presente che ciò apre un enorme rischio per la sicurezza eseguendo dichiarazioni arbitrarie. Se questo è un problema dipende dal tuo ambiente. Se viene utilizzato solo nelle sessioni SQL interattive, non è un problema.