首页 > 数据库 > mysql教程 > 如何在 PostgreSQL 中高效地多次调用带有数组参数的集合返回函数?

如何在 PostgreSQL 中高效地多次调用带有数组参数的集合返回函数?

Linda Hamilton
发布: 2024-12-26 12:32:10
原创
889 人浏览过

How Can I Efficiently Call a Set-Returning Function with an Array Argument Multiple Times in PostgreSQL?

多次调用带有数组参数的集合返回函数

此讨论围绕一个名为 foo 的集合返回函数进行,该函数可以处理利用特定参数的数据数组,并提供包含一组行和附加列的结果。虽然该函数在单个数据集上成功运行,但在尝试处理多个数据集而不依赖数据 ID 进行引用时,它遇到了挑战。

修改语法的各种尝试,例如使用以下格式:

SELECT dataid, (foo(ARRAY_AGG(data)),1).*
FROM dataset
WHERE dataid = something -- only testing on 1
GROUP BY dataid
登录后复制

都没有成功,导致每个函数都被重复调用

解决方案:横向连接

在 PostgreSQL 9.3 及更高版本中,使用 LEFT JOIN LATERAL 构造通常会产生最佳结果:

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;
登录后复制

此语法确保保留连接左侧的所有行,即使如果函数 foo 没有返回任何行。

如果 foo 确实不能返回任何行并且需要排除这些行,则可以使用以下语法:

CROSS JOIN LATERAL foo(sub.arr)
登录后复制

或其简写版本:

, foo(sub.arr)
登录后复制

这种方法记录在 PostgreSQL 手册中。

以上是如何在 PostgreSQL 中高效地多次调用带有数组参数的集合返回函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板