【问题标题】:Fetch refcursor in pl/proxy在 pl/proxy 中获取 refcursor
【发布时间】:2013-09-10 12:10:59
【问题描述】:

我正在使用 Postgresql 并且有一个简单的函数,它将向客户端返回一个 refcursor:

CREATE OR REPLACE FUNCTION select_user(cur refcursor, m_id text)
RETURNS setof refcursor AS $$ 
BEGIN
    OPEN $1 FOR SELECT * FROM public.users WHERE id=m_id;
    RETURN NEXT $1;
END;
$$ LANGUAGE plpgsql; 

我可以这样获取数据:

SELECT select_user('cur','999999'); FETCH ALL in cur;

像这样返回 1 行:

username   email                id
999999     999999@somewhere.cm  999999 

但现在的问题是,我正在使用 pl/proxy 和 Postgresql 在 pl/proxy server 我写了这个函数:

CREATE OR REPLACE FUNCTION select_user(cur refcursor, m_type integer, m_hid text)
RETURNS setof refcursor AS $$ 
   CLUSTER 'sqlcluster';
   RUN ON select_db(m_hid);
$$ LANGUAGE plproxy;

从上面的函数它返回 refcursor,但我无法获取 refcursor 使用此命令:

SELECT select_user('cur','999999'); FETCH ALL in cur;

返回错误:

SQL error:

ERROR:  cursor "cur" does not exist

谁能解释一下是什么问题?

【问题讨论】:

    标签: postgresql cursor plpgsql ref-cursor


    【解决方案1】:

    PL/Proxy 函数在不同的数据库中运行,并且 refcursor 在那里无效。你将不得不重新设计那部分代码。

    【讨论】:

    • 您能建议选择数据的最佳方法吗?谢谢。
    • 当您通过代理实例推送数据时,游标的使用没有多大意义。我建议你直接返回SETOF some_composite_type
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多