CTE表达式大家应该都不陌生,很多从Oracle迁移到Greenplum的小伙伴查询如何实现递归的时候,都会查到这个语法。CTE功能在Greenplum 5.x版本被引入,默认在5.x版本中禁用了该功能,这里对版本的配置及如何启用做一下简单记录,方便大家使用。
1.Greenplum不同版本对CTE的支持
- Greenplum 5.x版本,默认禁用该功能;需要开启参数
gp_recursive_cte_prototype才能使用; - Greenplum 6.x版本,默认启用该功能,无需额外配置。
2.如何开启CTE支持
在Greenplum 5.x版本中,我们可以通过在psql命令行执行命令查看是否开启对CTE的支持,如下:
postgres=# show gp_recursive_cte_prototype;
gp_recursive_cte_prototype
----------------------------
off
(1 row)
off表示为开启,on表示开启。
开启方式分为两种,一种是在session级别临时开启,一种是在数据库级别全局开启。
临时开启方法
在执行CTE表达式之前,添加一句set gp_recursive_cte_prototype to true;
例如:
set gp_recursive_cte_prototype to true; -- 部分低版本greenplum必须加
insert into neworg
(
id, name, pid, path_id, path_name, leve, is_leaf
)
with recursive result_ as -- 递归主体开始
(
select id -- 首先是

最低0.47元/天 解锁文章
436

被折叠的 条评论
为什么被折叠?



