2

当我尝试从 SNE GP 版中我的一张表上的插入触发器集调用函数时,出现此错误:

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,基兰

4

1 回答 1

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);

...问题就解决了。我知道这似乎需要做很多工作,但这样做的好处是值得的。

于 2011-03-09T17:04:49.867 回答