首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >GreenPlum内核升级

GreenPlum内核升级

作者头像
公众号guangcity
发布于 2022-12-02 20:37:26
发布于 2022-12-02 20:37:26
1.7K0
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

PostgreSQL(简称pg)是一个高级的对象关系数据库管理系统,它支持SQL标准的一个扩展子集。最近在研究pg14的create table like语句,如下命令会被拆分成若干个statement,在greenplum中QD与QE的处理还不一样,会将statement从QD分发到各个QE上。

代码语言:javascript
复制
CREATE TABLE inhg (x text, LIKE inhx INCLUDING INDEXES);

当前sql语句会在内核中拆分成create、like table两个statement。

create table statement中会使用DistributeBy的内容生成GpPolicy,同时会定义Relation。

like table statement中会生成AlterTableCmd、CommentStmt、IndexStmt,这些会在下一轮调用中使用,例如:上面这个语句会生成IndexStmt,将like的table(inhx)的index克隆一份。

而我们自己实现的DistributeBy是在第一轮CreateStatement中提前创建的,这个又依赖于inhx表的index,后来由于pg14代码的重构,移除了inh_indexes,新增了likecauses,并且移动index逻辑到第二轮调用,因此上述语句在我们内核升级过程中,就会创建失败。

因此为了解决create table like语句创建失败的问题,最终定位于distributeBy逻辑处理不当,这里重构为使用likecauses,废除inh_indexes。

今后将继续分享pg、gpdb等相关内容,本节完~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档