问题:
如何在使用时有效地排序和限制结果像 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中文网其他相关文章!