Ordre par/limite paramétré par PostgreSQL dans la fonction de table
La question explore les options d'incorporation de clauses d'ordre et de limite dans une fonction de table PostgreSQL, soulignant l'inefficacité potentielle de la commande et du découpage en dehors de la fonction.
Une solution présentée est l'utilisation de une fonction plpgsql, qui permet la construction et l'exécution de requêtes plus complexes via EXECUTE. Cette approche offre une plus grande flexibilité et un plus grand contrôle sur la requête.
Pour implémenter cela, une fonction plpgsql modifiée peut être créée :
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;
Cette fonction peut être appelée comme suit :
SELECT * FROM get_stuff('hello', 'col2', 100);
Cette solution évite les vulnérabilités d'injection SQL en utilisant quote_ident() pour les identifiants et la clause USING pour les valeurs des paramètres. De plus, RETURN QUERY EXECUTE renvoie efficacement les résultats de la requête.
Bien qu'une fonction plpgsql puisse être plus détaillée qu'une simple fonction SQL, elle offre une plus grande flexibilité et de meilleures performances pour les requêtes plus complexes.
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!