我想在视图中调用函数来解析虚拟列。计算取决于实际行中的数据,并且不希望多次选择数据。它是否正确??和奖金一样,是否可以在另一个呼叫中呼叫功能?
CREATE VIEW my_view AS SELECT c.column1,c.columns2,... my_function(c) FROM my_table c
CREATE VIEW my_view AS SELECT c.money, c.quantity,... my_ratio_function(c.money,c.quantity,select sum_all_pays(my_view)) FROM my_table c
请注意。我放在这里是因为在寻找时,找不到。如果您有任何其他想法,请说出来。第二个命令不确定是否正确。
答案 0 :(得分:1)
在视图定义中使用函数很好。唯一的约束 - 您应该始终为实际上是函数调用的列指定一个显式名称,否则PostgreSQL不知道如何呈现视图定义。
但是,您无法从视图中引用视图。相反,您可以创建2个视图,然后可以从外部视图引用内部视图。另一种方法是使用WITH construct,我发现它非常方便并且使用了很多。
请注意,该视图只是一个服务器存储的SQL,每次查询视图时都会为每一行调用函数。为了获得一些性能改进,您可能希望将函数定义为IMMUTABLE or as STABLE。
我同意弗兰克的意见 - 继续测试你的观点。