首頁 > 資料庫 > mysql教程 > 如何有效地排序和限制 PostgreSQL 表函數的結果?

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

Barbara Streisand
發布: 2025-01-05 02:33:40
原創
619 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板