有没有办法在不在聚合调用中使用 ORDER BY 的情况下对 postgresql 自定义聚合中的行进行预排序?

Is there a way to pre-sort the rows in a postgresql custom aggregate without using ORDER BY in the aggregate call?

我在 pl/pgsql 中创建了一个自定义聚合,它要求根据输入列以特定方式对行进行排序。我可以通过在聚合调用中使用 ORDER BY 来完成此操作。我希望在聚合调用中不明确说明 ORDER BY 的情况下进行这种排序。

例如我有聚合函数 f(A 文本,B 文本)。我可以通过这样调用它来得到正确的计算:

select
    X,
    Y,
    f(A, B order by A, B)
from
    table

group by
    X,
    Y

我希望能够像这样调用它并在自定义聚合定义的某处指定排序。

select
    X,
    Y,
    f(A, B)

from
    table

group by
    X,
    Y

这可能吗?

如果您希望聚合对输入值进行排序,您可能必须编写状态更改函数,以便它仅收集输入并在最终函数中执行排序。如果您为大型 table.

缓存数据,这可能需要大量内存

根据聚合的作用,您可能会想出更好的解决方案,但不能依赖于特定的值顺序。