2013-05-04 78 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