SOCI,pgsql函数返回表记录 - type_conversion无法正常工作

时间:2015-09-13 20:53:35

标签: c++ postgresql soci

我有一个pgsql函数声明为:

CREATE FUNCTION auth.read_session(session_id varchar) RETURNS auth.sessions

它从表auth.sessions中返回一条记录。 我有一个SOCI type_conversion,当它完全正常时 我跑select * from auth.sessions where id = :id。 它在找到匹配记录并且结果为NULL时有效。 但是,当我将语句更改为:

select * from auth.read_session('invalid');

我得到例外:

  

执行“select * from”时,此类型不允许空值   auth.read_session( '无效')。”

我尝试列出列,传递soci ::指标等。 我无法让它发挥作用。 例外来自base type_conversion<>。

在type-conversion-traits.h中有一条注释说明:

  

//默认traits类type_conversion,作为pass through for   row :: get()//当不需要实际转换时。

为什么不需要转换?是的,我的函数返回表类型“auth.sessions”的记录。 它应该返回RECORD而不是启动转换吗?

2 个答案:

答案 0 :(得分:0)

显然,这样做的唯一方法就是让函数返回SETOF记录。我相信不需要转换,因为在我的情况下整个结果是NULL并且它不能以某种方式转换为我自己的类型。 只要有任何结果,就返回单个表类型的记录。

如果函数被设计为始终返回记录,即使是空记录,但仍然是"记录"它将起作用。

答案 1 :(得分:0)

PadThink你对回归是正确的。要按照您的方式调用此函数,您需要返回QUERY,TABLE或SETOF记录。

http://www.postgresql.org/docs/9.2/static/xfunc-sql.html