如何在 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
我有一个函数可以生成静态 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