简介

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

openGauss开源数据库二次开发指导手册(上)相关推荐

  1. 边缘计算网关linux开发,边缘计算网关(BMG800系列)二次开发指导手册

    边缘计算网关二次开发指导手册 库函数接口介绍 (适用于:BMG800系列) 目录 1. 获取温湿度(硬件设备为sht10) 2. 获取大气压(硬件设备为bmp180) 3. 读取ADC值(硬件设备为m ...

  2. 泛微Ecology8.0二次开发指导手册

    文章目录 一.开发准备 二.开发环境搭建 步骤1:从服务器上拷贝WEAVER/ecology代码 步骤2:把本地代码导入到myeclipse工程中 步骤3:配置ecology项目环境 步骤4:修改ec ...

  3. 涂鸦智能CBU二次开发指导手册入门版——智能灯

    涂鸦智能灯例程是一个非常好的源码,其中包括了GPIO操作完成的引脚控制,模拟IIC,输出PWM,tuyaOS日志控制模块等,所以如果可以拿下智能灯例程,那么关于模块IIC通讯,电机控制等方面的设计要求 ...

  4. 涂鸦智能CBU二次开发指导手册入门版——智能插座

    基础版介绍了手机端-云端-终端的配置方法.相互关系.以及控 制原理,对涂鸦智能硬件设备有了初步的了解. 本书为涂鸦 SDK 开发入门指导,通过修改 demo 代码实现使用手 机端控制终端 LED 的功 ...

  5. 好书推荐 —《华为openGauss开源数据库实战》

    <华为openGauss开源数据库实战> 本书是一本指导读者快速步入华为openGauss开源数据库世界的实战指导书. 本书以循序渐进的方式,帮助读者一步一步地轻松掌握openGauss开 ...

  6. openGauss数据库开发指导手册(下)

    本篇将介绍学校数据模型以及学校数据模型表操作. 1.4 学校数据模型 1.4.1 关于本实验 以学校数据库模型为例,介绍openGauss数据库数据库.表.表空间.用户及其它对象,以及SQL语法使用的 ...

  7. LVGL开发指导手册

    LVGL开发指导手册 一,简介 介绍 LVGL(轻度综合图形界面库)作为一个免费开源图形库能够提供几乎所有的嵌入式GUI.该开源库有使用方便,画面美观,内存占用低等优点. 1,收集资料 2,窗口初始化 ...

  8. python控制caxa模块_CAXA二次开发实用手册.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp汽车/机械/制造&nbsp>&nbsp机械软件 CAXA二次开发实用手册.doc119页 本 ...

  9. 微信商城开源版二次开发(二)

    微信商城开源版二次开发(二) 最近想了解如何Java对接微信平台,快速搭建完整项目开发,发现网上有很对开源的这类二开源码.https://gitee.com/luozijing123/JooLun-w ...

最新文章

  1. 第08讲:解析无所不能的正则表达式
  2. 解决 /lib64/libc.so.6: version `GLIBC_2.15‘ not found 问题
  3. codeMirror配置
  4. 字符设备驱动程序的使用
  5. opencv 平滑处理
  6. 安装postgreSQL出现configure: error: zlib library not found解决方法
  7. mac使用eclipse创建java_【Java】Mac上使用Eclipse创建Java项目的一般步骤
  8. 数据通信基础(面试必备)
  9. 《Java并发编程实战》 第二章:线程安全性
  10. python比java_对比java和python对比
  11. 【暂更】分享亲测有效的那些实用「神器」!(网站/软件/小技巧)
  12. 我的工程学导论学习心得1
  13. js中的设计模式之单例模式
  14. LASSO近端梯度下降法Proximal Gradient Descent公式推导及代码
  15. 墨客科技执行董事袁英:MOAC区块链赋能实体产业的方案与实践
  16. PAT 乙级 1046(划拳)
  17. 2023轩辕奖出炉,怿星科技共创荣誉
  18. IPv4 地址与 int 值转换【Python】
  19. cad中怎么随意移动图形_CAD中需要挪动图形到准确位置?试试这几种方法
  20. word页码自增、页眉页脚的增长

热门文章

  1. ipc的一些背光补偿 宽动态 和降噪参数
  2. 是什么在背后支撑起“带货一哥”李佳琦?
  3. 《阿甘正传》经典台词
  4. adode cs6安装问题
  5. 苹果新闻分享其新推出的小工具的iPad 2
  6. JS事件:onmouseover 、onmouseout 与onmouseenter 、onmouseleave的区别
  7. 再也不能迟到了!单位启用人脸识别考勤
  8. 光缆弹性模量计算_皮带弹性模量一般是多少
  9. 游戏服务器被攻击怎么办?
  10. EXT4文件系统学习(16)文件系统的挂载mount