如何在 PostgreSQL 中 运行 包含静态 SQL 查询的字符串?

How to run a string containing a static SQL query in PostgreSQL?

我有一个函数可以生成静态 SQL 查询并将其 returns 作为字符串。我需要做的是 运行 返回的字符串 就像我直接在 psql 中输入一样。这是一个非常简化的测试用例(真正的机制要复杂得多,但下面的测试用例至少说明了这个想法)

drop table if exists person;
create table person(
    first_name  varchar(30),
    last_name   varchar(50),
    email       varchar(100)
);
insert into person(first_name, last_name, email) values 
    ('fname01', 'lname01', 'fname01.lname01@hotmail.com'),
    ('fname02', 'lname02', 'fname02.lname02@hotmail.com'),
    ('fname03', 'lname03', 'fname03.lname03@hotmail.com'),
    ('fname04', 'lname04', 'fname04.lname04@hotmail.com'),
    ('fname05', 'lname05', 'fname05.lname05@hotmail.com');
--
--
drop function if exists sql_gen;
create function sql_gen() returns text as
$fun$
begin
    return 'select * from person';
end;
$fun$
language plpgsql;
--
--

现在如果我 运行 以下内容:

select * from sql_gen();
       sql_gen
----------------------
 select * from person
(1 ligne)

这给了我 sql 查询。但我想做的是 运行 来自的查询 返回的字符串 就像我在 psql 中手动写入 select * from person 并按 Enter 以获得查询结果。

我已经检查了联机文档中的 PREPARE, EXECUTE,但到目前为止我还无法实现。你能解释一下吗?

psql 的具体答案是将分号更改为 \gexec

select * from sql_gen() \gexec