【发布时间】:2015-01-13 07:42:06
【问题描述】:
我需要在 greenplum MPP 的子/父表中创建一个面包屑字段
原始表有2个字段:父亲,孩子 我需要用面包屑提取视图
例如有这个记录
1, 2
1, 3
2, 4
4, 5
我需要提取:
1/2
1/3
1/2/4
1/2/4/5
等等
Greenplum 是一个基于 postgresql 8.2 的 MPP 处理引擎。基本上它是一个postgres 但是,给定版本,它不支持 8.3 中的“带有递归”的 postgresql 功能。
此外,如果我尝试创建一个函数来完成这项工作,我会遇到其他 GP 限制
例如,如果我创建如下函数
CREATE OR REPLACE FUNCTION getBreadCrumb(decimal) RETURNS text AS 'DECLARE
itemid ALIAS FOR $1;
itemfullname text;
itemrecord RECORD;
BEGIN
SELECT * INTO itemrecord FROM mytable where father=itemid;
itemfullname := coalesce(itemfullname, '''') || itemrecord.father::text;
IF itemrecord.child IS NOT NULL THEN
itemfullname := itemfullname || ''/'' || getBreadCrumb(itemrecord.child)::text ;
RETURN itemfullname;
ELSE
RETURN itemfullname;
END IF;
END' LANGUAGE 'plpgsql'
然后尝试从中选择我得到的
ERROR: function cannot execute on segment because it accesses relation "mytable" (functions.c:152)
在我看来,这与 greenplum 的“无共享”架构有关。
还有其他想法来创建面包屑以提供我所拥有的环境吗?
提前致谢
【问题讨论】:
标签: greenplum