在C ++代码中处理PL / pgSQL函数的消息

时间:2013-07-26 06:19:00

标签: c++ postgresql plpgsql libpq

我正在PL / pgSQL函数中运行计算,我想在我的C ++代码中使用该计算的结果。最好的方法是什么?

我可以将该结果插入到表中并从那里使用它,但我不确定这种效果与最佳实践有多好。另外,我可以使用stderrRAISE NOTICE发送消息,但我不知道我可以在代码中使用该消息。

1 个答案:

答案 0 :(得分:1)

这里的细节有点薄,所以很难肯定。

非常可取的是直接获取函数的返回值。如果它返回单个结果,则为SELECT my_function(args);如果返回一行或一组行,则为SELECT * FROM my_function(args);。然后像处理任何其他查询结果一样处理结果。这是part of the basic use of simple SQL and PL/PgSQL functions

其他选项包括:

  • Returning a refcursor。这在您想要返回动态结果集或多个结果集的某些情况下非常有用,尽管现在它主要被RETURN QUERYRETURN QUERY EXECUTE取代。然后,您FETCH from the refcursor获取结果行。

  • LISTENing for an eventhaving the function NOTIFY when the work is done,可能将结果作为通知有效负载。当函数不一定在与想要使用其结果的程序相同的连接上调用时,这很有用。

  • 在函数中创建一个临时表,然后从调用该函数的会话中的表中创建SELECT

  • 通过RAISE发送日志消息并设置client_min_messages以便您接收它们,然后处理它们。这是一种非常难看的方式,应该不惜一切代价避免这种做法。

  • INSERT将结果放入现有的非临时表中,然后在事务提交后SELECT将它们输出,并且行对其他事务可见。

哪个更好?这完全取决于你想要做什么。在几乎所有情况下,正确的做法是调用函数并处理返回值,但在特殊情况下也有例外。