我正在运行 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 次 - 大概每列一次。这对性能没有好处!我怎样才能确保它只被调用一次?它已被标记为 STABLE。
如果我称它为
SELECT * FROM my_function(input)
然后警告只打印一次,但我不知道如何将它集成到更大的查询中,并返回连接和其他列。也就是说,当我需要 FROM 列表中的其他表并且函数从这些表中获取输入时,我不知道如何将函数放入 FROM 列表中。
编辑:
查询(更接近原始):
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 列(border、lower_limit、upper_limit),但是my_aggregate_function
是一个聚合并且my_function
是一个常规函数。