Fonctions PostgreSQL : comparaison des langages SQL et PL/pgSQL
Les fonctions PostgreSQL peuvent être écrites en SQL ou en langage procédural PL/pgSQL. Les deux langues présentent des avantages et des inconvénients, et la langue que vous choisissez dépend des besoins spécifiques de votre fonction.
Fonction SQL
Les fonctions SQL sont plus simples et plus faciles à écrire que les fonctions PL/pgSQL. Ils sont également plus efficaces pour les requêtes et fonctions scalaires simples qui ne sont appelées que quelques fois par session. Cependant, les fonctions SQL ne peuvent pas effectuer d'opérations procédurales telles que des boucles ou des branchements.
Fonctions PL/pgSQL
Les fonctions PL/pgSQL sont plus puissantes que les fonctions SQL et peuvent effectuer un plus large éventail de tâches. C'est un meilleur choix pour les fonctions qui nécessitent des opérations procédurales ou qui sont appelées plusieurs fois par session. Les fonctions PL/pgSQL peuvent également être utilisées pour définir des déclencheurs et des procédures stockées.
Ce qui suit est un résumé des principales différences entre les fonctions SQL et PL/pgSQL :
特性 | SQL 函数 | PL/pgSQL 函数 |
---|---|---|
简单性 | 更易编写 | 更复杂编写 |
效率 | 对于简单任务更高效 | 对于简单任务效率较低 |
过程操作 | 无法执行过程操作 | 可以执行过程操作 |
调用频率 | 对于每个会话仅调用几次的函数更高效 | 对于每个会话调用多次的函数更高效 |
触发器和存储过程 | 无法定义触发器或存储过程 | 可以定义触发器和存储过程 |
Exemple
Les deux fonctions suivantes sont fonctionnellement équivalentes, mais la fonction SQL est plus efficace :
<code class="language-sql">CREATE FUNCTION f1(istr varchar) RETURNS text AS $$ SELECT 'hello! ' || istr; $$ LANGUAGE SQL;</code>
<code class="language-sql">CREATE FUNCTION f2(istr varchar) RETURNS text AS $$ BEGIN RETURN 'hello! ' || istr; END; $$ LANGUAGE PL/pgSQL;</code>
La fonction SQL est plus efficace car elle ne nécessite l'exécution d'aucun code procédural. D'un autre côté, les fonctions PL/pgSQL doivent exécuter les blocs BEGIN et END, ce qui ajoute une surcharge.
Conclusion
Les fonctions SQL et PL/pgSQL ont chacune leurs propres avantages et inconvénients. La langue que vous choisissez dépend des besoins spécifiques de votre fonction.
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!