テーブル関数の PostgreSQL パラメータ化された Order By / Limit
この質問では、PostgreSQL テーブル関数内に order by 句とlimit 句を組み込むためのオプションを検討します。関数の外側での順序付けとスライスの潜在的な非効率性を強調しています。
1 つの解決策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 中国語 Web サイトの他の関連記事を参照してください。