PostgreSQL 记录了它的Set Returning Functions 和这样的 C 扩展,
C 语言函数有两个用于返回集合(多行)的选项。
- 在一种称为
ValuePerCall
mode的方法中,重复调用一个返回集合的函数(每次传递相同的参数),并且在每次调用时返回一个新行,直到没有更多行要返回,并通过返回 NULL 来发出信号。因此,set-returning 函数 (SRF) 必须在调用之间保存足够的状态以记住它在做什么并在每次调用时返回正确的下一项。- 在另一个名为
Materialize
mode的方法中, SRF 填充并返回一个包含其整个结果的 tuplestore 对象;那么整个结果只发生一次调用,不需要调用间状态。
如果您正在优化执行速度,哪个更快ValuePerCall
或Materialize
模式?显然,物化模式将占用更多内存,但如果您的目标是返回一整套,它似乎应该更快,但我没有看到任何地方都有记录。
这些似乎在代码中记录为Set Returning Function Mode SFRM_ValuePerCall
和SFRM_Materialize
.