简介
openGauss是开源关系型数据库,采用客户端/服务器,单进程多线程架构,支持单机和一主多备部署方式,备机可读,支持双机高可用和读扩展。
本实验主要描述如何对openGauss开源数据库进行二次开发,并编译验证。
内容描述
本实验主要内容为在开源社区注册、拉取本地代码、对openGauss开源数据库进行简单修改体验二次开发,并安装数据库进行验证。
前置条件
由于本实验涉及到在openEuler操作系统上进行openGauss数据库的部署,需要掌握Linux系统的基本操作和系统命令。
实验环境说明
- 组网说明
本实验环境需要本地Windows操作系统的PC以及openEuler操作系统的华为云环境,需要购买弹性云服务器。 - 设备介绍
为了满足实验需要,建议每套实验环境采用以下配置:
开发环境的设备明细表
设备名称 | 设备型号 |
操作系统 | Windows |
编译环境设备明细表
设备名称 | 设备型号 |
操作系统 | openEuler20.3LTS |
Python | Python 3.7.X |
实验概览
社区环境准备
需要完成码云账号注册、绑定主邮箱以及签署CLA贡献者协议之后,才能参与社区贡献。
注册码云账号
步骤 1 登录码云官网(https://gitee.com/),单击页面右上角的“注册”按钮注册账号。
步骤 2 在注册页面填写相关信息并勾选阅读并同意相关条款及规范,完成码云注册,如下图所示。
必填信息如下:
- 姓名:码云账号名称。
- 个人空间地址:注册账号主页地址,可用作推拉代码或者登录Gitee的用户名。
- 手机或者邮箱:验证需要。建议使用邮箱注册,默认为主邮箱,无需执行绑定主邮箱操作。
- 密码:密码不少于6位。建议为字母、符号和数字的组合,以提升安全性。
绑定主邮箱
步骤 1 在“个人主页”页面,单击“设置”按钮进入“个人信息”设置页面。如下图所示。
步骤 2 在左侧导航栏单击“邮箱管理”,修改或者绑定主邮箱。主邮箱默认为注册时使用的邮箱。如下图所示。
签署CLA贡献者协议
进入CLA签署页面(https://opengauss.org/en/cla.html)。
选择“签署个人CLA(Sign Individual CLA)”,填写相关信息。
单击签署,完成CLA签署。如图1-4所示。
搭建开发环境
搭建开发环境之前需要在码云(https://gitee.com/)上完成注册Gitee账号、签署CLA协议(贡献者许可协议),详情请参见1 社区环境准备。
拉取个人分支
步骤 1 进入开源社区网站的openGauss-server(代码)仓库。
地址如下https://gitee.com/opengauss,单击openGauss-server,如下图所示。
步骤 2 单击右上角“Forked”按钮,Fork(复刻)个人分支,如下图所示。
步骤 3 进入开源社区网站的openGauss-OM(代码)仓库。
地址如下https://gitee.com/opengauss/openGauss-OM?_from=gitee_search,单击右上角“Forked”按钮,Fork(复刻)个人分支。如下图所示:
安装并配置Git环境
安装Git环境
下载Git客户端并按默认设置安装,Git下载地址:https://git-scm.com/download/win,根据操作系统位数(32位/64位),下载并安装相应的Git(命令行工具)。
- 说明
本章节中开发环境使用的是Windows 64位环境,请下载Winodws 64位版本的git工具。
在Windows上下载完成后文件名为Git-2.31.1-64-bit.exe,双击此文件进行安装。
配置Git环境
步骤 1 打开运行窗口,并输入cmd,点击“回车”进入命令提示符界面。
步骤 2 在cmd中配置全局Git用户名。
git config --global user.name "Your Name"
"Your Name"为自己的Gitee账号名称,您可以在Gitee个人主页获取,如下图中xzp-blog。
步骤 3在cmd中配置全局Git邮箱。
git config --global user.email "email@example.com"
"email@example.com"为注册Gitee的主邮箱,可通过Gitee个人设置中的“邮箱管理”获取自己的主邮箱,如下图:
步骤 4 在cmd中生成ssh公钥。
通过自己Gitee的主邮箱生成ssh公钥。
ssh-keygen -t rsa -C "email@example.com"
步骤 5 查看公钥信息。
在命令提示符中,使用type命令查看公钥信息,公钥路径示例如上图所示。
type C:\Users\Administrator\.ssh\id_rsa.pub
说明:
.ssh/id_rsa.pub为公钥文件保存地址。id_rsa.pub为自定义的pub文件名称。
步骤 6 在个人Gitee账户中添加您的SSH公钥。
步骤 7 将远程仓库克隆至本地。
先在本地电脑上创建openGauss-server文件夹,如在C盘下创建。
然后在CDM命令行中,通过如下语句进入存放个人远程仓库的本地目录。
cd C:\openGauss-server
从个人远程仓库地址下载数据库源码至本地工作目录。
git clone https://gitee.com/Your Name/openGauss-server.git
Your Name为自己配置的全局Git用户名,请根据实际替换。
步骤 8 设置本地工作目录的upstream源。
cd C:\openGauss-server\openGauss-server ---#先进入相应目录
git remote add upstream https://gitee.com/opengauss/openGauss-server.git ---#openGauss远程地址
步骤 9 设置同步方式。
git remote set-url --push upstream no_push
安装开发工具
openGauss内核开发以C/C++语言为主,本节以安装VScode(Visual studio code)工具为例进行介绍。如本地PC已安装有开发工具,可跳过本节。
步骤 1下载VScode软件。
登录https://code.visualstudio.com/downloadg下载软件如图2-4所示。请根据操作系统选择相应的版本,本节以64位Windows操作系统为例。
步骤 2 单击完成下载的软件执行安装。
选择“我同意此协议”后单击“下一步”。
步骤 3 确认安装位置后单击“下一步”。
步骤 4 配置环境变量。
选中“添加到PATH(重启后生效)”复选框,勾选此选项后可不再配置环境变量直接使用。
步骤 5 单击“完成”,结束安装。
步骤 6安装openGauss所需的开发语言c/c++。
二次开发(以实现gauss_hello函数为例)
本章作为演示,为openGauss数据库新增一个系统函数gauss_hello(name),该函数能返回格式为“Hello,”的提示信息,如下图:
将个人远程仓库内容更新至本地
步骤 1 将主仓库的内容更新至个人远程仓库(可选)。
如果非首次修改本地文件,建议您执行如下操作,使远程仓库与本地仓库保持一致。在开源社区网站的个人仓库页面,单击如下图标将主仓库的内容更新至个人远程仓库。如下图所示:
步骤 2 在本地Git工具执行如下命令,将个人远程仓库内容更新至本地仓库。
git fetch upstream
git merge upstream/master
修改本地文件
以实现gauss_hello函数为例,需执行如下步骤。
步骤 1 使用vscode导入数据库本地文件夹
单击 文件 然后选择 打开文件夹。
选择 openGauss-server 文件夹。
导入成功。
步骤 2 加入gauss_hello函数实现。
修改本地文件src/common/backend/utils/adt/varlena.cpp,在文件末尾加入如下代码:
Datum gauss_hello(PG_FUNCTION_ARGS)
{
text *hello = cstring_to_text("Hello, ");
text *name = PG_GETARG_TEXT_PP(0);
text *message = text_catenate(hello, name);
PG_RETURN_TEXT_P(message);
}
添加完成后点击保存,确认修改已经保存。
步骤 3 加入gauss_hello函数声明。
修改本地文件src/include/utils/builtins.h,在文件末尾“#endif”前加入如下代码:
extern Datum gauss_hello(PG_FUNCTION_ARGS);
步骤 4 将gauss_hello函数注册到系统表。
修改本地文件src/common/backend/catalog/builtin_funcs.ini,在文件中按照函数名排序将如下代码加入合适位置:
AddFuncGroup(
"gauss_hello", 1,
AddBuiltinFunc(_0(GAUSSHELLOFUNCOID), _1("gauss_hello"), _2(1), _3(true), _4(false), _5(gauss_hello), _6(25), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(1, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("gauss_hello"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33(NULL), _34('f'))
),
添加完成后点击保存,确认修改已经保存。
步骤 5 声明常量GAUSSHELLOFUNCOID。
修改本地文件src/include/catalog/pg_proc.h,文件末尾“#endif”前加入如下代码,声明常量GAUSSHELLOFUNCOID,该常量将步骤3中的代码引用,作为gauss_hello函数在系统表中注册时所使用的oid,如下代码以oid为9981为例:
#define GAUSSHELLOFUNCOID 9981
添加完成后点击保存,确认修改已经保存。
注意:
GAUSSHELLOFUNCOID常量须定义为一个尚未被其他函数占用的整数,否则数据库初始化时会因无法为oid建立唯一索引而初始化失败。
提交本地修改到个人远程仓库
在cmd中先进入修改文件所在的文件夹目录,在目录下打开Git工具,然后在Git工具中执行如下命令,将本地修改提交至个人远程仓库。
cd C:\openGauss-server\openGauss-server
git add .
git commit -m "20210321" ----#提交原因
git push origin master