In PostgreSQL kann es vorkommen, dass Sie eine Mengen-zurückgebende Funktion mehrmals aufrufen müssen , wobei jedes Mal ein Array als Argument bereitgestellt wird. Wenn Sie jedoch die herkömmliche Methode der Übergabe eines einzelnen Arrays an die Funktion verwenden, wird die Funktion möglicherweise mehrmals aufgerufen, was zu einer ineffizienten Verarbeitung führt.
Um dieses Problem zu beheben, bieten PostgreSQL 9.3 und höher den LEFT JOIN LATERAL an. .. ON wahre Syntax. Dieser Ansatz optimiert die Ausführung durch die Ausführung der folgenden Schritte:
Um diesen Ansatz zu veranschaulichen, betrachten Sie das folgende Beispiel:
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;
In diesem Beispiel aggregiert die Unterabfrage die Datenspalte für jede Daten-ID und erstellt ein Array. Dieses Array wird dann als Argument an die Funktion foo() übergeben, die einen Satz erweiterter Datenzeilen zurückgibt.
Alternativ, wenn die Funktion foo() möglicherweise keine Zeilen zurückgeben kann und Sie alle Zeilen beibehalten möchten Links vom Join können Sie die CROSS JOIN LATERAL- oder Kurzschriftsyntax verwenden.
Durch die Verwendung dieses Ansatzes können Sie eine Mengenrückgabefunktion mehrmals mit effizient aufrufen Array-Argumente, um unnötige Funktionsaufrufe zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Set-Return-Funktion mit Array-Argumenten in PostgreSQL effizient mehrmals aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!