PostgreSQL SELECT-Klausel: Verhalten mehrerer Set-Return-Funktionen
Das Zusammenspiel mehrerer Set-Return-Funktionen (SRFs) innerhalb einer PostgreSQL-SELECT
-Klausel ist versionabhängig. Das Verständnis dieses Verhaltens ist entscheidend für vorhersehbare Abfrageergebnisse.
PostgreSQL 10 und höher:
In PostgreSQL 10 und nachfolgenden Versionen werden SRFs vor Skalarausdrücken in der SELECT
-Liste verarbeitet. Dies entspricht funktional der Verwendung in einer LATERAL FROM
-Klausel. Das System generiert iterativ Ausgabezeilen: Zuerst unter Verwendung des ersten Ergebnisses von jedem SRF, dann unter Verwendung des zweiten Ergebnisses von jedem und so weiter.
Wenn die SRFs unterschiedliche Zeilenzahlen zurückgeben, werden die kürzeren Ergebnisse mit NULL
Werten aufgefüllt, um der Länge des längsten Ergebnissatzes zu entsprechen. Dadurch wird sichergestellt, dass alle Ausgabezeilen die gleiche Anzahl von Spalten haben.
PostgreSQL 9.6 und früher:
Ältere Versionen (9.6 und niedriger) zeigen ein anderes Verhalten. Die Gesamtzahl der Ausgabezeilen wird zum kleinsten gemeinsamen Vielfachen (LCM) der von jedem SRF generierten Zeilenanzahl. Dies kann zu unerwarteten und möglicherweise unvorhersehbaren Ergebnissen führen, insbesondere wenn die SRF-Ergebnissatzgrößen keinen gemeinsamen Teiler haben.
Best Practices:
Um Unklarheiten zu vermeiden und konsistente Ergebnisse in allen PostgreSQL-Versionen sicherzustellen, wird dringend empfohlen, die Verwendung mehrerer SRFs direkt in der SELECT
-Liste zu vermeiden, insbesondere in älteren PostgreSQL-Versionen. Der LATERAL
-Join bietet einen klareren, vorhersehbareren und versionübergreifenden kompatiblen Ansatz für die Handhabung mehrerer SRFs.
Weiterführende Literatur:
Das obige ist der detaillierte Inhalt vonWie verhalten sich mehrere Set-Return-Funktionen in einer PostgreSQL-SELECT-Klausel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!