表函数中的 PostgreSQL 参数化 Order By / Limit
该问题探讨了在 PostgreSQL 表函数中合并 order by 和 limit 子句的选项,强调了函数外部排序和切片的潜在低效率。
提出的一种解决方案是使用plpgsql 函数,它允许通过 EXECUTE 构建和执行更复杂的查询。这种方法提供了更大的灵活性和对查询的控制。
要实现此目的,可以创建修改后的 plpgsql 函数:
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);
该解决方案通过使用 quote_ident() 作为标识符,使用 USING 子句作为参数值来避免 SQL 注入漏洞。此外,RETURN QUERY EXECUTE 可以有效地返回查询结果。
虽然 plpgsql 函数可能比简单的 SQL 函数更冗长,但它为更复杂的查询提供了更大的灵活性和性能。
以上是如何在 PostgreSQL 表函数中高效实现参数化 ORDER BY 和 LIMIT 子句?的详细内容。更多信息请关注PHP中文网其他相关文章!