有没有办法在PostgreSQL中的字符串值(如eval)中执行查询?

min*_*hee 13 sql postgresql select eval

我想这样做:

SELECT (EVAL 'SELECT 1') + 1;
Run Code Online (Sandbox Code Playgroud)

EVAL在PostgreSQL中有没有办法像这样做?

a_h*_*ame 18

如果您尝试"eval"的语句始终返回相同的数据类型,则可以编写一个使用Grzegorz提到的EXECUTE的eval()函数.

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
Run Code Online (Sandbox Code Playgroud)

然后你可以做类似的事情

SELECT eval('select 41') + 1;
Run Code Online (Sandbox Code Playgroud)

但是,如果动态语句为要评估的每个表达式返回不同的内容,则此方法将不起作用.

还要记住,通过运行任意语句会带来巨大的安全风险.如果这是一个问题取决于您的环境.如果仅在交互式SQL会话中使用,那么这不是问题.