在pl / proxy中获取refcursor

时间:2013-09-10 12:11:00

标签: postgresql cursor plpgsql ref-cursor

我正在使用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 

但现在问题是,我正在使用带有Postgresql的pl / proxy 在pl / proxy服务器中,我写了这个函数:

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

有人能解释一下这是什么问题吗?

1 个答案:

答案 0 :(得分:1)

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