我有一个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而不是启动转换吗?
答案 0 :(得分:0)
显然,这样做的唯一方法就是让函数返回SETOF记录。我相信不需要转换,因为在我的情况下整个结果是NULL并且它不能以某种方式转换为我自己的类型。 只要有任何结果,就返回单个表类型的记录。
如果函数被设计为始终返回记录,即使是空记录,但仍然是"记录"它将起作用。
答案 1 :(得分:0)
PadThink你对回归是正确的。要按照您的方式调用此函数,您需要返回QUERY,TABLE或SETOF记录。