PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Gibt es eine Möglichkeit, eine Abfrage innerhalb des Zeichenfolgenwerts (wie eval) in PostgreSQL auszuführen?

Wenn die Anweisungen, die Sie "auswerten" möchten, immer denselben Datentyp zurückgeben, könnten Sie eine eval()-Funktion schreiben, die das von Grzegorz erwähnte EXECUTE verwendet.

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

Dann könnten Sie so etwas wie

tun
SELECT eval('select 41') + 1;

Dieser Ansatz funktioniert jedoch nicht, wenn Ihre dynamischen Anweisungen für jeden Ausdruck, den Sie auswerten möchten, etwas anderes zurückgeben.

Denken Sie auch daran, dass dies ein enormes Sicherheitsrisiko darstellt, wenn willkürliche Anweisungen ausgeführt werden. Ob das ein Problem ist, hängt von Ihrer Umgebung ab. Wenn dies nur in interaktiven SQL-Sitzungen verwendet wird, ist dies kein Problem.