表函數中的PostgreSQL 參數化Order By / Limit
此問題探討了在PostgreSQLSQL 表函數中合併 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中文網其他相關文章!