PostgreSQL SELECT 子句:多个集合返回函数的行为
PostgreSQL SELECT
子句中多个集合返回函数 (SRF) 的交互与版本相关。 理解这种行为对于可预测的查询结果至关重要。
PostgreSQL 10 及更高版本:
在 PostgreSQL 10 及后续版本中,SRF 在 列表中 标量表达式之前进行处理。 这在功能上等同于在 SELECT
子句中使用它们。系统迭代地生成输出行:首先使用每个 SRF 的初始结果,然后使用每个 SRF 的第二个结果,依此类推。LATERAL FROM
值填充,以匹配最长结果集的长度。这可确保所有输出行具有相同的列数。NULL
PostgreSQL 9.6 及更早版本:
旧版本(9.6 及以下)表现出不同的行为。输出行总数成为每个 SRF 生成的行计数的最小公倍数 (LCM)。 这可能会导致意外和潜在不可预测的结果,特别是当 SRF 结果集大小不共享公约数时。
最佳实践:
为了避免歧义并确保跨 PostgreSQL 版本的结果一致,强烈建议避免直接在 列表中使用多个 SRF,尤其是在较旧的 PostgreSQL 版本中。 SELECT
连接提供了一种更清晰、更可预测且跨版本兼容的方法来处理多个 SRF。LATERAL
进一步阅读:
以上是多个集合返回函数在 PostgreSQL SELECT 子句中的行为如何?的详细内容。更多信息请关注PHP中文网其他相关文章!