Greenplum:尚不支持从segDB执行SQL语句的函数

时间:2011-01-03 06:24:53

标签: sql postgresql greenplum

当我尝试从SNE GP Edition中的某个表上的Insert Trigger集调用函数时出现此错误:

ERROR:  Functions that execute SQL statements from the segDBs are not yet supported (spi.c:203)  (seg0 localhost:50001 pid=5504)
DETAIL:  
  SQL statement "SELECT DISTINCT min(zasn) FROM zeusasn WHERE zasn IN (SELECT asn FROM asntable where ip >>= '10.29.249.121')"
PL/pgSQL function "eptriggerfn" line 5 at SQL statement

********** Error **********

ERROR: Functions that execute SQL statements from the segDBs are not yet supported (spi.c:203)  (seg0 localhost:50001 pid=5504)
SQL state: XX000
Detail: 
  SQL statement "SELECT DISTINCT min(zasn) FROM zeusasn WHERE zasn IN (SELECT asn FROM asntable where ip >>= '10.29.249.121')"
PL/pgSQL function "eptriggerfn" line 5 at SQL statement

这可能是什么原因?触发器+功能与同一个数据库中的另一个表完美配合。

提前致谢!

RGDS, 基兰

1 个答案:

答案 0 :(得分:3)

由于Greenplum跨多个节点进行分布式处理,因此查询中的查询无法使用完整的处理功能,因此不受支持。

当我们进行切换时,我们遇到了类似的问题:

select      *,
            country_name(country_id)
from        sales
where       country_id in (224, 105);

函数country_name()基本上为每个id执行了一个子查询以获取国家/地区名称。所以我们不得不将查询更改为:

select      *,
            c.country_name
from        sales
left join   country as c using (country_id)
where       country_id in (224, 105);

......问题解决了。我知道它似乎很多工作,但它的好处是值得的。