Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine Set-Return-Funktion mit einem Array-Argument in PostgreSQL effizient mehrmals aufrufen?

Wie kann ich eine Set-Return-Funktion mit einem Array-Argument in PostgreSQL effizient mehrmals aufrufen?

Linda Hamilton
Freigeben: 2024-12-26 12:32:10
Original
911 Leute haben es durchsucht

How Can I Efficiently Call a Set-Returning Function with an Array Argument Multiple Times in PostgreSQL?

Mehrmaliges Aufrufen einer Mengenrückgabefunktion mit einem Array-Argument

Diese Diskussion dreht sich um eine Mengenrückgabefunktion namens foo, die verarbeiten kann Ein Array von Daten, das einen bestimmten Parameter verwendet und ein Ergebnis liefert, das eine Reihe von Zeilen und eine zusätzliche Spalte enthält. Während die Funktion erfolgreich mit einem einzelnen Datensatz funktioniert, stößt sie auf Herausforderungen, wenn versucht wird, mehrere Datensätze zu verarbeiten, ohne sich für die Referenzierung auf eine Daten-ID zu verlassen.

Verschiedene Versuche, die Syntax zu ändern, z. B. die Verwendung des folgenden Formats:

SELECT dataid, (foo(ARRAY_AGG(data)),1).*
FROM dataset
WHERE dataid = something -- only testing on 1
GROUP BY dataid
Nach dem Login kopieren

war nicht erfolgreich, was dazu führte, dass die Funktion für jede Spalte wiederholt aufgerufen wurde.

Lösung: Lateral Join

In PostgreSQL-Versionen 9.3 und höher führt die Verwendung eines LEFT JOIN LATERAL-Konstrukts normalerweise zu optimalen Ergebnissen:

SELECT sub.dataid, f.*
FROM (
   SELECT dataid, array_agg(data) AS arr
   FROM dataset
   WHERE dataid = something
   GROUP BY 1
   ) sub
LEFT JOIN LATERAL foo(sub.arr) f ON true;
Nach dem Login kopieren

Diese Syntax stellt sicher, dass alle Zeilen links vom Join bleiben erhalten, auch wenn die Funktion foo keine Zeilen zurückgibt.

Wenn foo kann Wenn tatsächlich keine Zeilen zurückgegeben werden und der Ausschluss dieser Zeilen erwünscht ist, kann die folgende Syntax verwendet werden:

CROSS JOIN LATERAL foo(sub.arr)
Nach dem Login kopieren

oder ihre Kurzversion:

, foo(sub.arr)
Nach dem Login kopieren

Dieser Ansatz ist im PostgreSQL-Handbuch dokumentiert.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Set-Return-Funktion mit einem Array-Argument in PostgreSQL effizient mehrmals aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage