我使用的是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     [email protected]  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

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

最佳答案

PL/Proxy函数正在另一个数据库中运行,而refcursor在该数据库中无效。你必须重新设计这部分代码。

关于postgresql - 在pl/proxy中获取refcursor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18718640/

10-09 07:08