SOCI, pgsql函数返回表记录- type_conversion不工作

SOCI, pgsql function returning table record - type_conversion not working

本文关键字:type conversion 工作 记录 pgsql 函数 返回 SOCI      更新时间:2023-10-16

我有一个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');

I get exception:

在执行"select * from"时,不允许为空值auth.read_session(‘无效’)"。

我尝试列出列,传递soci::指示器等。我无法使它运转。异常来自基类type_conversion<>。

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

//默认trait类type_conversion,作为传递Row::get()//当不需要实际转换时。

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

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

如果一个函数被设计为总是返回一个记录,即使是空的,但仍然是一个"记录",那么它将工作。

我想你是对的。要调用这个函数,你需要返回一个QUERY、TABLE或SETOF记录。

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

相关文章: