Maison > base de données > tutoriel mysql > Comment trier et limiter efficacement les résultats d'une fonction de table PostgreSQL ?

Comment trier et limiter efficacement les résultats d'une fonction de table PostgreSQL ?

Barbara Streisand
Libérer: 2025-01-05 02:33:40
original
626 Les gens l'ont consulté

How to Efficiently Order and Limit Results from a PostgreSQL Table Function?

Ordre et limitation paramétrés par PostgreSQL dans les fonctions de table

Question :

Comment peut-on ordonner et limiter efficacement les résultats lors de l'utilisation une fonction de table SQL comme getStuff ? L'ordre et la limitation en dehors de la fonction ou l'utilisation de plpgsql sont envisagés. Existe-t-il une meilleure approche ?

Réponse :

Malgré son apparence initiale, une fonction plpgsql est l'option privilégiée pour gérer des scénarios plus complexes. Les performances ne peuvent souffrir que lorsque les fonctions plpgsql sont imbriquées, où le planificateur de requêtes ne peut pas optimiser complètement le code dans le contexte de la requête externe.

Une fonction plpgsql simplifiée qui évite un CASE excessif clauses :

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;
Copier après la connexion

Utilisation :

SELECT * FROM get_stuff('hello', 'col2', 100);
Copier après la connexion

Remarques :

  • Utilisez RETURN QUERY EXECUTE pour renvoie les résultats de la requête en une seule opération.
  • Assurez-vous que les identifiants sont à l'épreuve de SQLi avec quote_ident().
  • Utilisez USING pour transmettre les valeurs des paramètres, empêchant ainsi la conversion et SQLi.
  • Évitez les conflits de noms entre les paramètres et les noms de colonnes.
  • La fonction modifiée initiale échoue car elle renvoie le parent mais est déclaré comme renvoyant des éléments SETOF. Pensez plutôt à utiliser RETURNS TABLE.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal