Maison >base de données >tutoriel mysql >Comment se comportent plusieurs fonctions de retour d'ensemble dans la clause SELECT de PostgreSQL dans différentes versions ?

Comment se comportent plusieurs fonctions de retour d'ensemble dans la clause SELECT de PostgreSQL dans différentes versions ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-17 23:42:09876parcourir

How Do Multiple Set-Returning Functions Behave in PostgreSQL's SELECT Clause Across Different Versions?

Gestion par PostgreSQL de plusieurs fonctions de retour d'ensemble dans les instructions SELECT : une analyse spécifique à la version

Le comportement de PostgreSQL lorsqu'il rencontre plusieurs fonctions renvoyant un ensemble dans une instruction SELECT varie considérablement en fonction de la version de la base de données.

PostgreSQL 10 et versions ultérieures :

Dans les versions 10 et supérieures, ces fonctions s'exécutent de manière synchrone. La sortie est structurée de telle sorte que la fonction produisant le plus de lignes dicte le nombre total de lignes dans le jeu de résultats. Les sorties de fonction plus courtes sont complétées par des valeurs NULL pour maintenir cet alignement, créant ainsi un résultat de type jointure croisée.

PostgreSQL 9.6 et versions antérieures :

Avant la version 9.6, le résultat diffère considérablement. Le nombre total de lignes générées est égal au plus petit commun multiple (LCM) du nombre de lignes de chaque fonction renvoyant un ensemble. Cela peut conduire à des résultats imprévisibles et potentiellement indésirables, en particulier lorsque le nombre de lignes ne partage aucun facteur commun.

Exemple illustratif :

Examinons la requête :

<code class="language-sql">SELECT generate_series(1, 3), generate_series(5, 7);</code>

Sortie PostgreSQL 10 :

<code> generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
               NULL |               NULL
               NULL |               NULL
               NULL |               NULL</code>

PostgreSQL 9.6 - Sortie :

<code> generate_series | generate_series 
-----------------+-----------------
               1 |               5
               2 |               6
               3 |               7
               1 |               5
               2 |               6
               3 |               7
               1 |               5
               2 |               6
               3 |               7</code>

Considérations clés :

  • PostgreSQL 10 et versions ultérieures interdisent l'utilisation de fonctions renvoyant un ensemble dans les expressions CASE et COALESCE.
  • Pour un contrôle amélioré et des résultats prévisibles, il est fortement recommandé d'utiliser LATERAL JOIN avec ROWS FROM (...) au lieu d'inclure directement plusieurs fonctions de retour d'ensemble dans la liste SELECT.

Documentation pertinente :

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!

Déclaration:
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