简介

openGauss是开源关系型数据库,采用客户端/服务器,单进程多线程架构,支持单机和一主多备部署方式,备机可读,支持双机高可用和读扩展。
本实验主要描述如何对openGauss开源数据库进行二次开发,并编译验证。

内容描述

本实验主要内容为在开源社区注册、拉取本地代码、对openGauss开源数据库进行简单修改体验二次开发,并安装数据库进行验证。

前置条件

由于本实验涉及到在openEuler操作系统上进行openGauss数据库的部署,需要掌握Linux系统的基本操作和系统命令。

实验环境说明

  • 组网说明
    本实验环境需要本地Windows操作系统的PC以及openEuler操作系统的华为云环境,需要购买弹性云服务器。
  • 设备介绍
    为了满足实验需要,建议每套实验环境采用以下配置:

开发环境的设备明细表

设备名称

设备型号

操作系统

Windows

编译环境设备明细表

设备名称

设备型号

操作系统

openEuler20.3LTS

Python

Python 3.7.X

实验概览

opengauss是不是基于mysql opengauss创建数据库_opengauss是不是基于mysql

社区环境准备

需要完成码云账号注册、绑定主邮箱以及签署CLA贡献者协议之后,才能参与社区贡献。

注册码云账号

步骤 1 登录码云官网(https://gitee.com/),单击页面右上角的“注册”按钮注册账号。

opengauss是不是基于mysql opengauss创建数据库_数据库开发_02


步骤 2 在注册页面填写相关信息并勾选阅读并同意相关条款及规范,完成码云注册,如下图所示。

opengauss是不是基于mysql opengauss创建数据库_database_03


必填信息如下:

  • 姓名:码云账号名称。
  • 个人空间地址:注册账号主页地址,可用作推拉代码或者登录Gitee的用户名。
  • 手机或者邮箱:验证需要。建议使用邮箱注册,默认为主邮箱,无需执行绑定主邮箱操作。
  • 密码:密码不少于6位。建议为字母、符号和数字的组合,以提升安全性。

绑定主邮箱

步骤 1 在“个人主页”页面,单击“设置”按钮进入“个人信息”设置页面。如下图所示。

opengauss是不是基于mysql opengauss创建数据库_opengauss是不是基于mysql_04

步骤 2 在左侧导航栏单击“邮箱管理”,修改或者绑定主邮箱。主邮箱默认为注册时使用的邮箱。如下图所示。

opengauss是不是基于mysql opengauss创建数据库_opengauss是不是基于mysql_05

签署CLA贡献者协议

进入CLA签署页面(https://opengauss.org/en/cla.html)。

opengauss是不是基于mysql opengauss创建数据库_git_06


选择“签署个人CLA(Sign Individual CLA)”,填写相关信息。

opengauss是不是基于mysql opengauss创建数据库_数据库开发_07


单击签署,完成CLA签署。如图1-4所示。

opengauss是不是基于mysql opengauss创建数据库_数据库开发_08

搭建开发环境

搭建开发环境之前需要在码云(https://gitee.com/)上完成注册Gitee账号、签署CLA协议(贡献者许可协议),详情请参见1 社区环境准备。

拉取个人分支

步骤 1 进入开源社区网站的openGauss-server(代码)仓库。

地址如下https://gitee.com/opengauss,单击openGauss-server,如下图所示。

opengauss是不是基于mysql opengauss创建数据库_数据库_09


步骤 2 单击右上角“Forked”按钮,Fork(复刻)个人分支,如下图所示。

opengauss是不是基于mysql opengauss创建数据库_数据库_10


步骤 3 进入开源社区网站的openGauss-OM(代码)仓库。

地址如下https://gitee.com/opengauss/openGauss-OM?_from=gitee_search,单击右上角“Forked”按钮,Fork(复刻)个人分支。如下图所示:

opengauss是不是基于mysql opengauss创建数据库_git_11

安装并配置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,点击“回车”进入命令提示符界面。

opengauss是不是基于mysql opengauss创建数据库_数据库_12


步骤 2 在cmd中配置全局Git用户名。

git config --global user.name "Your Name"

"Your Name"为自己的Gitee账号名称,您可以在Gitee个人主页获取,如下图中xzp-blog。

opengauss是不是基于mysql opengauss创建数据库_database_13


步骤 3在cmd中配置全局Git邮箱。

git config --global user.email "email@example.com"

"email@example.com"为注册Gitee的主邮箱,可通过Gitee个人设置中的“邮箱管理”获取自己的主邮箱,如下图:

opengauss是不是基于mysql opengauss创建数据库_git_14


步骤 4 在cmd中生成ssh公钥。

通过自己Gitee的主邮箱生成ssh公钥。

ssh-keygen -t rsa -C "email@example.com"

opengauss是不是基于mysql opengauss创建数据库_数据库_15


步骤 5 查看公钥信息。

在命令提示符中,使用type命令查看公钥信息,公钥路径示例如上图所示。

type C:\Users\Administrator\.ssh\id_rsa.pub

说明:

.ssh/id_rsa.pub为公钥文件保存地址。id_rsa.pub为自定义的pub文件名称。

opengauss是不是基于mysql opengauss创建数据库_database_16


步骤 6 在个人Gitee账户中添加您的SSH公钥。

opengauss是不是基于mysql opengauss创建数据库_database_17


步骤 7 将远程仓库克隆至本地。

先在本地电脑上创建openGauss-server文件夹,如在C盘下创建。

然后在CDM命令行中,通过如下语句进入存放个人远程仓库的本地目录。

cd C:\openGauss-server

从个人远程仓库地址下载数据库源码至本地工作目录。

git clone https://gitee.com/Your Name/openGauss-server.git

Your Name为自己配置的全局Git用户名,请根据实际替换。

opengauss是不是基于mysql opengauss创建数据库_数据库_18


步骤 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操作系统为例。

opengauss是不是基于mysql opengauss创建数据库_database_19


步骤 2 单击完成下载的软件执行安装。

选择“我同意此协议”后单击“下一步”。

opengauss是不是基于mysql opengauss创建数据库_opengauss是不是基于mysql_20


步骤 3 确认安装位置后单击“下一步”。

opengauss是不是基于mysql opengauss创建数据库_数据库_21


步骤 4 配置环境变量。

选中“添加到PATH(重启后生效)”复选框,勾选此选项后可不再配置环境变量直接使用。

opengauss是不是基于mysql opengauss创建数据库_数据库开发_22


步骤 5 单击“完成”,结束安装。

opengauss是不是基于mysql opengauss创建数据库_数据库_23


步骤 6安装openGauss所需的开发语言c/c++。

opengauss是不是基于mysql opengauss创建数据库_git_24

二次开发(以实现gauss_hello函数为例)

本章作为演示,为openGauss数据库新增一个系统函数gauss_hello(name),该函数能返回格式为“Hello,”的提示信息,如下图:

opengauss是不是基于mysql opengauss创建数据库_database_25

将个人远程仓库内容更新至本地

步骤 1 将主仓库的内容更新至个人远程仓库(可选)。

如果非首次修改本地文件,建议您执行如下操作,使远程仓库与本地仓库保持一致。在开源社区网站的个人仓库页面,单击如下图标将主仓库的内容更新至个人远程仓库。如下图所示:

opengauss是不是基于mysql opengauss创建数据库_git_26


步骤 2 在本地Git工具执行如下命令,将个人远程仓库内容更新至本地仓库。

git fetch upstream
git merge upstream/master

opengauss是不是基于mysql opengauss创建数据库_git_27

修改本地文件

以实现gauss_hello函数为例,需执行如下步骤。

步骤 1 使用vscode导入数据库本地文件夹

单击 文件 然后选择 打开文件夹。

opengauss是不是基于mysql opengauss创建数据库_git_28


选择 openGauss-server 文件夹。

opengauss是不是基于mysql opengauss创建数据库_opengauss是不是基于mysql_29


导入成功。

opengauss是不是基于mysql opengauss创建数据库_数据库_30


步骤 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);
}

opengauss是不是基于mysql opengauss创建数据库_opengauss是不是基于mysql_31


添加完成后点击保存,确认修改已经保存。

步骤 3 加入gauss_hello函数声明。

修改本地文件src/include/utils/builtins.h,在文件末尾“#endif”前加入如下代码:

extern Datum gauss_hello(PG_FUNCTION_ARGS);

opengauss是不是基于mysql opengauss创建数据库_opengauss是不是基于mysql_32


步骤 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'))
),

opengauss是不是基于mysql opengauss创建数据库_database_33


添加完成后点击保存,确认修改已经保存。

步骤 5 声明常量GAUSSHELLOFUNCOID。

修改本地文件src/include/catalog/pg_proc.h,文件末尾“#endif”前加入如下代码,声明常量GAUSSHELLOFUNCOID,该常量将步骤3中的代码引用,作为gauss_hello函数在系统表中注册时所使用的oid,如下代码以oid为9981为例:

#define GAUSSHELLOFUNCOID 9981

opengauss是不是基于mysql opengauss创建数据库_database_34


添加完成后点击保存,确认修改已经保存。

注意:

GAUSSHELLOFUNCOID常量须定义为一个尚未被其他函数占用的整数,否则数据库初始化时会因无法为oid建立唯一索引而初始化失败。

提交本地修改到个人远程仓库

在cmd中先进入修改文件所在的文件夹目录,在目录下打开Git工具,然后在Git工具中执行如下命令,将本地修改提交至个人远程仓库。

cd C:\openGauss-server\openGauss-server
git add . 
git commit -m "20210321"   ----#提交原因
git push origin master

opengauss是不是基于mysql opengauss创建数据库_database_35