Hello OceanBase!开启 OceanBase 二次开发

作者简介:夏克,OceanBase 社区文档贡献者,多年从事金融行业核心系统设计开发工作,服务于某交易所子公司,现阶段负责国产数据库调研,近期考取了OBCA 、PCTA 认证。

引子
最近看到一篇帖子 OceanBase 源码解读(十一):表达式和函数,作者简介:竹翁,毕业于北京大学, OceanBase 内核研发总监。竹翁老师在最后说:“为 OceanBase 添加系统内建函数,是 OceanBase SQL 组很多新人入职第一题”。虽然暂时没有跳槽的打算,但是还是想试一下这道第一题。我本身不是 DBA,平时和数据库打交道的机会也不多,只是最近由于工作原因开始了解一些国产数据库头部产品。就我的领域而言,算是“出圈”了。看了很多各大社区的帖子,参与了一些公开课,也更深刻的感受到国产数据库生态蓬勃发展的趋势,同时也非常感谢那些能把自己积累的经验分享出来的国产 DBer,让我这样的门外汉能够迅速的“入圈”-。所谓“投之以木桃,报之以琼瑶”,正值 OceanBase 社区的征文活动。也希望能把我一些浅薄的经验留给社区,希望更多有需要的 DBer 能看到

概要
Hello OceanBase,看到这标题,你可能会联想到“ Hello World ”,是的!没错!这篇帖子就是 OceanBase 二次开发的“ Hello World ”。通过一个 demo 了解如何添加或修改 OceanBase 内建函数,或者说如何基于 OceanBase 社区版进行二次开发。做这个尝试除了上面提到的竹翁老师的文章外,还源于一个需求,即数据库的外部函数扩展。在 Oracle 中提供了可以调用 C 或者 JAVA 函数的功能——外部函数,调用外部函数方式就像是调用内建函数一样的,从用户的角度没有任何区别。从某种意义上讲,这个功能提升了数据库的扩展性,也可以应对一些业务场景,比如,一些比较复杂的数学算法,通过 SQL 或者 Oracle 内置函数实现比较麻烦,可以作为外部函数通过 C 或者 JAVA 来实现,当然这些算法可以上提到业务层来实现(不抬杠,只讨论这个功能)。之前调研了几款国产数据库也写了一些类似使用外部函数的操作流程达梦DM8数据库实现 Oracle 中的外部函数、postgresql 自定义函数实现,通过 contrib 模块进行扩展 供大家参考。达梦外部函数的基本用法与 Oracle 类似,细节和实现上略有差异;像 OpenGauss/MogDB、TDSQL-PG、人大金仓等,是基于 PostgreSQL 内核的产品,所以天然的继承了postgres 的扩展方式。但 OceanBase 目前应该是没有这样的扩展方式。然而我想一定会有另辟蹊径的方法——不能外部扩展,那么就内部扩展_。让我们从“ Hello OceanBase ”开始。

环境准备

OceanBase 集群