首页 >数据库 >mysql教程 >如何有效地排序和限制 PostgreSQL 表函数的结果?

如何有效地排序和限制 PostgreSQL 表函数的结果?

Barbara Streisand
Barbara Streisand原创
2025-01-05 02:33:40678浏览

How to Efficiently Order and Limit Results from a PostgreSQL Table Function?

PostgreSQL 表函数中的参数化排序和限制

问题:

如何在使用时有效地排序和限制结果像 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);

注释:

  • 使用 RETURN QUERY EXECUTE 来单一返回查询结果操作。
  • 使用 quote_ident() 确保标识符是 SQLi 防护的。
  • 利用 USING 传递参数值,防止强制转换和 SQLi。
  • 避免参数和列之间的命名冲突名称。
  • 初始编辑的函数失败,因为它返回父级,但声明返回 SETOF 内容。考虑使用 RETURNS TABLE 代替。

以上是如何有效地排序和限制 PostgreSQL 表函数的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn