Postgresql
Postgres 函式中的 RETURN NEXT
我目前正在編寫一個 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
也可用於將所有結果一次性流式傳輸給呼叫者。