我运行的PostgreSQL 9.2.1,并有一个返回3列的PLPGSQL功能。 这就是所谓的像这样(简化):
SELECT (my_function(b.input)).*, a.other, b.columns
FROM table_a a
JOIN table_b b ON a.id = b.id
WHERE ...
功能打印出警告消息,并且我很惊讶地发现它印刷3次。 它看起来像函数被调用3次 - 大概是一次为每个列。 这不能很好的表现! 我怎样才能确保它被称为只有一次? 它已经标记为稳定。
如果我把它作为
SELECT * FROM my_function(input)
然后警告只打印一次,但我不知道我怎么能整合到与连接和返回等栏目更大的查询。 也就是说,我不知道如何把功能分为从列表,当我需要在其他表发件人列表功能,从那些需要它的输入。
编辑 :
查询(更接近原始的):
SELECT (my_aggregate_function(sub1.border, sub1.lower_limit, sub1.upper_limit, operation)).*
FROM
(
SELECT (my_function(ca.timeslice_id)).*, agc.operation
FROM geometry_component agc
JOIN volume av ON agc.volume_id = av.id
JOIN volume_dependency avd ON av.contributor_id = avd.id
JOIN my_rowset_function('2013-02-22') ca ON avd.id = ca.feature_id
WHERE agc.timeslice_id = 12345
ORDER BY agc.sequence
) sub1
my_aggregate_function
和my_function
每个返回3列(边框,LOWER_LIMIT,UPPER_LIMIT),但my_aggregate_function
是聚合和my_function
是一个普通的功能。