我正在 PL/pgSQL 函数中运行计算,并且我想在我的 C++ 代码中使用该计算的结果。最好的方法是什么?
我可以将该结果插入表格并从那里使用它,但我不确定最佳实践的效果如何。另外,我可以向stderr
with发送消息,RAISE NOTICE
但我不知道是否可以在我的代码中使用该消息。
我正在 PL/pgSQL 函数中运行计算,并且我想在我的 C++ 代码中使用该计算的结果。最好的方法是什么?
我可以将该结果插入表格并从那里使用它,但我不确定最佳实践的效果如何。另外,我可以向stderr
with发送消息,RAISE NOTICE
但我不知道是否可以在我的代码中使用该消息。
这里的细节在地面上有点薄,所以很难确定。
只要有可能,最好直接获取函数的返回值。SELECT my_function(args)
如果它返回单个结果,或者SELECT * FROM my_function(args);
如果它返回一行或一组行。然后像处理任何其他查询结果一样处理结果。这是简单 SQL 和 PL/PgSQL 函数基本使用的一部分。
其他选项包括:
返回一个 refcursor。在您想要返回动态结果集或多个结果集的某些情况下,这可能很有用,尽管它现在主要被RETURN QUERY
and取代RETURN QUERY EXECUTE
。然后您FETCH
从 refcursor中获取结果行。
LISTEN
处理一个事件并在工作完成时拥有该功能NOTIFY
,可能将结果作为通知有效负载。当函数不一定在与想要使用其结果的程序相同的连接上调用时,这很有用。
在函数中创建一个临时表,然后SELECT
从调用该函数的会话中的表中创建。
通过发送日志消息RAISE
并设置client_min_messages
以便您接收它们,然后处理它们。这是一种非常丑陋的做法,应该不惜一切代价避免。
INSERT
将结果放入现有的非临时表中,然后SELECT
在事务提交并且行对其他事务可见时将它们取出。
哪个更好?这完全取决于你想要做什么。在几乎所有情况下,正确的做法是调用函数并处理返回值,但在特殊情况下也有例外。