首页 文章

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

提问于
浏览
0

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

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

RETURNS双精度AS

$ BODY $

开始

从ref_test_V中选择计数(*)到速率

返回;

结束;

$ BODY $

LANGUAGE plpgsql VOLATILE;

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

Query: 从ref_test中选择1,testfunc(id)

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

TIA

2 回答

  • 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;
    
  • 0

    从下表中调用函数 .

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

相关问题