問題:
如何在使用時有效地排序和排序限制結果像getStuff 這樣的SQL 表函數?正在考慮在函數外部進行排序和限製或使用 plpgsql。有更好的方法嗎?
答案:
儘管它最初出現,plpgsql 函數 是處理更複雜場景的首選選項。只有當 plpgsql 函數嵌套時,效能可能會受到影響,此時查詢規劃器無法在外部查詢的上下文中完全最佳化程式碼。
簡化的plpgsql 函數,避免過多的CASE子句:
CREATE OR REPLACE FUNCTION get_stuff(_param text, _orderby text, _limit int) RETURNS SETOF stuff AS $func$ BEGIN RETURN QUERY EXECUTE ' SELECT * FROM stuff WHERE col = ORDER BY ' || quote_ident(_orderby) || ' ASC LIMIT ' USING _param, _limit; END $func$ LANGUAGE plpgsql;
用法:
SELECT * FROM get_stuff('hello', 'col2', 100);
註解:
以上是如何有效地排序和限制 PostgreSQL 表函數的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!