PostgreSQL SELECT 句: 複数のセットを返す関数の動作
PostgreSQL SELECT
句内の複数のセットを返す関数 (SRF) の相互作用はバージョンに依存します。 この動作を理解することは、クエリ結果を予測するために非常に重要です。
PostgreSQL 10 以降:
PostgreSQL 10 以降のバージョンでは、SRF は リストのスカラー式の前SELECT
に処理されます。 これは機能的には LATERAL FROM
句で使用するのと同等です。システムは出力行を反復的に生成します。最初に各 SRF からの最初の結果を使用し、次にそれぞれの 2 番目の結果を使用するという具合です。
SRF がさまざまな行数を返す場合、最も長い結果セットの長さと一致するように、短い結果には NULL
値が埋め込まれます。これにより、すべての出力行の列数が確実に同じになります。
PostgreSQL 9.6 以前:
古いバージョン (9.6 以下) は異なる動作を示します。出力行の合計数は、各 SRF によって生成された行数の最小公倍数 (LCM) になります。 これにより、特に SRF 結果セットのサイズに公約数がない場合、予期せぬ結果や潜在的に予測不可能な結果が生じる可能性があります。
ベストプラクティス:
曖昧さを避け、PostgreSQL のバージョン間で一貫した結果を保証するために、特に古い PostgreSQL バージョンでは、SELECT
リスト内で複数の SRF を直接使用しないことを強くお勧めします。 LATERAL
結合は、複数の SRF を処理するための、より明確で予測可能な、バージョン間互換性のあるアプローチを提供します。
さらに読む:
以上がPostgreSQL SELECT 句では、複数のセットを返す関数はどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。