PostgreSQL 对 SELECT 语句中多个集合返回函数的处理:特定于版本的分析
当 SELECT
语句中遇到多个返回集合的函数时,PostgreSQL 的行为根据数据库版本的不同而有很大差异。
PostgreSQL 10 及更高版本:
在版本 10 及更高版本中,这些函数同步执行。 输出的结构使得生成最多行的函数决定结果集中的总行数。 较短的函数输出用 NULL
值填充以保持这种对齐,从而有效地创建类似交叉连接的结果。
PostgreSQL 9.6 及更早版本:
在 9.6 版本之前,结果有很大不同。生成的总行数等于每个集合返回函数的行计数的最小公倍数 (LCM)。 这可能会导致不可预测且可能不理想的结果,特别是当行数没有共同因素时。
示例:
让我们检查一下查询:
<code class="language-sql">SELECT generate_series(1, 3), generate_series(5, 7);</code>
PostgreSQL 10 输出:
<code> generate_series | generate_series -----------------+----------------- 1 | 5 2 | 6 3 | 7 NULL | NULL NULL | NULL NULL | NULL</code>
PostgreSQL 9.6-输出:
<code> generate_series | generate_series -----------------+----------------- 1 | 5 2 | 6 3 | 7 1 | 5 2 | 6 3 | 7 1 | 5 2 | 6 3 | 7</code>
主要考虑因素:
CASE
和 COALESCE
表达式内使用返回集合的函数。LATERAL JOIN
和 ROWS FROM (...)
,而不是直接在 SELECT
列表中包含多个设置返回函数。相关文档:
以上是多个集合返回函数在不同版本的 PostgreSQL SELECT 子句中的行为如何?的详细内容。更多信息请关注PHP中文网其他相关文章!