Greenplum问题:函数无法在段上执行,因为它访问关系

时间:2016-07-01 12:25:33

标签: postgresql greenplum

我正在使用greenplum数据库。下面是我以前执行的函数定义。

CREATE OR REPLACE FUNCTION testfunc(IN id int,OUT rate double precision)

RETURNS双精度AS

$ BODY $

开始

从ref_test_V

中选择计数(*)为速率

返回;

端;

$ BODY $

LANGUAGE plpgsql VOLATILE;

当我在选择列表中调用此函数时,它会让我低于错误

查询:从ref_test

中选择1,testfunc(id)

错误: XX000:函数无法在段上执行,因为它访问关系" public.ref_test_v" (functions.c:155)(seg25 slice1 *****。com 1026 pid = 193132)(cdbdisp.c:1326)

TIA

2 个答案:

答案 0 :(得分:0)

Greenplum不支持此功能。如果它得到支持,请考虑一下它会做什么。它将从一个段中获取一行,然后从它自己进行计数(*)。将检索下一行,它将再次执行计数(*)。

执行此操作的纯SQL方法是:

with x as (select count(*) as total_count from ref_test_V)
select 1, x.total_count from ref_test, x;

如果您不喜欢使用公用表表达式,则可以使用子查询来执行此操作。

select 1, x.total_count 
from   ref_test, 
       (select count(*) as total_count 
       from ref_test_V) as x;

答案 1 :(得分:0)

从下表中调用该函数。

select 1, (select testfunc(5)) from ref_test;