当我尝试从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, 基兰
答案 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);
......问题解决了。我知道它似乎很多工作,但它的好处是值得的。