2013-05-04 76 views
2

plpython函数如何将结果集作为普通的sql查询结果集(而不是文本)返回。如何使用PostgreSQL中的Plpython3返回结果集

这里是函数定义 -

DROP FUNCTION IF EXISTS demo_report(); 
CREATE OR REPLACE FUNCTION demo_report() 
    RETURNS SETOF <what-type> 
AS $$ 
    rv = plpy.execute("SELECT * FROM test") 
    return rv 
$$ LANGUAGE plpython3u; 

当我执行选择demo_report();应该在结果集返回到客户端,而不是现在text.Right我得到这个文本 - enter image description here

我使用的Postgres 9.2与Windows plpython3u。

回答

2

我找到方法来获得期望的结果 - 对于表:

CREATE TABLE public.test 
(
    id serial NOT NULL, 
    name varchar(200) NOT NULL CHECK (name <> ''), 
    salary int, 
    created date, 
    CONSTRAINT id PRIMARY KEY (id), 
) 
WITH (
    OIDS = FALSE, 
    autovacuum_enabled = true 
); 

我Plpython3u功能 -

CREATE OR REPLACE FUNCTION demo_report() 
    RETURNS SETOF test 
AS $$ 
    resp = [] 
    rv = plpy.execute("SELECT * FROM test") 
    for i in rv: 
    resp.append(i) 
    return resp 

$$ LANGUAGE 'plpython3u' VOLATILE; 

我查询它喜欢 -

select * from demo_report(); 

现在我正在得到所需的响应 - enter image description here

到目前为止,它一直很惬意的旅程。享受它。

+0

基本上我是返回类型作为表名称。这工作如果我使用查询SELECT * FROM测试;在plpython代码中。如果我确实选择了ID,则从测试中得到名称;它打破了。仍然需要找到一种解决方法,而不需要定义新的类型。 – 2013-05-04 17:21:32

+1

您可以创建一个TYPE而不是一个表。 https://stackoverflow.com/a/38315231/487992 – JohnMudd 2017-07-19 21:18:49