Postgresql

Postgres 函式中的 RETURN NEXT

  • April 26, 2014

我目前正在編寫一個 plpgsql 函式,該函式將從表中選擇並生成大量數據。

我原本打算返回一個數組,但我找到了一個解釋“ RETURN NEXT操作的資源 - 對於呼叫者來說非常方便。

但是,我閱讀了有關以下內容的簡介:

注意: RETURN NEXT 和 RETURN QUERY 的目前實現在從函式返回之前儲存整個結果集,如上所述。這意味著如果 PL/pgSQL 函式產生非常大的結果集,性能可能會很差:

是否有 Postgres 功能允許我的函式在生成結果時將結果流式傳輸回呼叫者?這可能是 Postgres 架構的一般限制,但我想確保我沒有忽略某些東西!

如果結果不是要在子查詢中使用而是通過程式碼使用,則可以REFCURSOR在事務中使用 a。

例子:

CREATE FUNCTION example_cursor() RETURNS refcursor AS $$
DECLARE
 c refcursor;
BEGIN
 c:='mycursorname';
 OPEN c FOR select * from generate_series(1,100000);
 return c;                                       
end;
$$ language plpgsql;

呼叫者的用法:

BEGIN;
SELECT example_cursor();
[output: mycursor]
FETCH 10 FROM mycursor;

Output:

generate_series 
-----------------
              1
              2
              3
              4
              5
              6
              7
              8
              9
             10

CLOSE mycursor;
END;

當對零碎檢索不感興趣時,FETCH ALL FROM cursorname也可用於將所有結果一次性流式傳輸給呼叫者。

引用自:https://dba.stackexchange.com/questions/62489