如何在 Postgres 中使用 Plpython3 返回结果集
Posted
技术标签:
【中文标题】如何在 Postgres 中使用 Plpython3 返回结果集【英文标题】:How to return resultset with Plpython3 in Postgres 【发布时间】:2013-05-04 16:57:28 【问题描述】:plpython 函数如何将结果集作为普通的 sql 查询结果集(而不是文本)返回。
这是函数定义 -
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;
当我执行 select demo_report(); 时,它应该将结果集而不是文本返回给客户端。现在我将其作为文本 -
我在 Windows 上使用带有 plpython3u 的 Postgres 9.2。
【问题讨论】:
【参考方案1】:我找到了获得预期结果的方法 - 对于表:
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();
现在我得到了想要的响应 -
到目前为止,使用 plpython 的旅程非常愉快。享受它。
【讨论】:
基本上我将类型作为表名返回。如果我使用查询 SELECT * FROM test; 则此方法有效;在plpython代码中。如果我从测试中选择 id,name;它打破了。仍然需要找到一种方法来解决它而不定义新类型。 您可以创建 TYPE 而不是表。 ***.com/a/38315231/487992以上是关于如何在 Postgres 中使用 Plpython3 返回结果集的主要内容,如果未能解决你的问题,请参考以下文章
YMatrix + PLPython替代Spark实现车联网算法
PostgreSQL,plpython3u函数。 os.getenv找不到环境变量