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

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

Barbara Streisand
发布: 2025-01-05 02:33:40
原创
678 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板