【问题标题】:How to return resultset with Plpython3 in Postgres如何在 Postgres 中使用 Plpython3 返回结果集
【发布时间】: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。

【问题讨论】:

    标签: python postgresql postgresql-9.2 plpython


    【解决方案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 而不是表。 stackoverflow.com/a/38315231/487992
    猜你喜欢
    • 2019-04-02
    • 2013-06-30
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多