PostgreSQL では、Set を返す関数を複数回呼び出す必要がある状況に遭遇することがあります。 、毎回引数として配列を指定します。ただし、単一の配列を関数に渡す従来の方法を使用すると、関数が複数回呼び出され、非効率な処理が発生する可能性があります。
この問題を解決するために、PostgreSQL 9.3 以降では LEFT JOIN LATERAL が提供されています。 .. ON 真の構文。このアプローチでは、次の手順を実行することで実行が最適化されます。
このアプローチを説明するために、次の例を考えてみましょう。
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;
この例では、サブクエリは各 dataid のデータ列を集計し、配列を作成します。次に、この配列は引数として foo() 関数に渡され、拡張されたデータ行のセットが返されます。
あるいは、foo() 関数が行を返さない可能性があり、すべての行を保持したい場合は、結合の左側では、CROSS JOIN LATERAL または短縮構文を使用できます。
このアプローチを利用すると、効率的に配列引数を使用して関数を複数回返し、不要な関数呼び出しを回避します。
以上がPostgreSQL で配列引数を使用してセットを返す関数を効率的に複数回呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。