OpenGauss/MogDB调用C FUNCTION 范例

本文档详细介绍了如何在MogDB中开发和安装自定义C函数,类似于PostgreSQL的contrib模块扩展。通过MogDB的现有安装包,无需完整源码即可进行插件开发。步骤包括编写C代码、配置CMakeLists.txt、编译和安装。最后,通过创建CFUNCTION并验证函数功能,展示了整个过程。
摘要由CSDN通过智能技术生成

摘要

之前写过一篇关于postgresql自定义函数实现,通过contrib模块进行扩展的帖子,今天和恩墨工程师进行了一些交流,在MogDB中也可以实现同样的功能,原以为需要完整的OpenGauss的源码才能完成,但在恩墨工程师的指点下,了解到,通过既有官网版本的安装包就可以进行插件开发。而且,使用postgres的C FUNCTION要比开发插件更加容易些。也感谢恩墨专家提供的线索和思路👍 👍

环境准备

  • 安装MogDB
    参考官方文档,写的已经很详细了。
  • 服务器环境
    本地虚拟机 centos 7.9

注意:尽量进入omm用户下进行编译,可以避免一些不必要的环境问题

代码

  • C代码
    基本与postgres插件开发一样,关键是4,5,6三行。
#include "postgres.h"
#include "fmgr.h"

PG_MODULE_MAGIC;
extern "C" Datum add_ab(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(add_ab);

Datum
add_ab(PG_FUNCTION_ARGS)
{
          int32 arg_a = PG_GETARG_INT32(0);
          int32 arg_b = PG_GETARG_INT32(1);

          PG_RETURN_INT32(arg_a + arg_b);
}
  • CMakeLists.txt
cmake_minimum_required (VERSION 2.8)

project (gs_plug)
set(CMAKE_CXX_FLAGS "-Wall -std=c++11 -Wall")
set(CMAKE_CXX_FLAGS_DEBUG "-g3")
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
set(CMAKE_BUILD_TYPE Debug)

set(MOG_INCLUDE /opt/mogdb/app/include/postgresql/server)
set(MOG_LIBPATH /opt/mogdb/app/lib/proc_srclib)
include_directories(${MOG_INCLUDE})

aux_source_directory(. DIR_SRCS)
add_library (${PROJECT_NAME} SHARED ${DIR_SRCS})

install(TARGETS ${PROJECT_NAME} DESTINATION ${MOG_LIBPATH})

要点1:获取包含头文件的目录

[omm@vmpc funcs]$ pg_config --includedir
/opt/mogdb/app/include

所需头文件路径:`pg_config --includedir`/postgresql/server

要点1:c函数安装路径

[omm@vmpc funcs]$ pg_config --pkglibdir
/opt/mogdb/app/lib/postgresql

安装路径:`pg_config --pkglibdir`/proc_srclib/

编译 & 安装

[omm@vmpc funcs]$ mkdir build
[omm@vmpc funcs]$ cd build/
[omm@vmpc build]$ cmake ../
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /opt/mogdb/funcs/build
[omm@vmpc build]$ make
[ 50%] Building CXX object CMakeFiles/gs_plug.dir/testfunc.cpp.o
[100%] Linking CXX shared library libgs_plug.so
[100%] Built target gs_plug
[omm@vmpc build]$ make install
Consolidate compiler generated dependencies of target gs_plug
[100%] Built target gs_plug
Install the project...
-- Install configuration: "Debug"
-- Installing: /opt/mogdb/app/lib/proc_srclib/libgs_plug.so

依次执行如下命令

mkdir build
cd build
cmake ../
make
make install

确认安装

[omm@vmpc build]$ ll /opt/mogdb/app/lib/proc_srclib/libgs_plug.so
-rwxr-xr-x. 1 omm dbgrp 215696 Apr  2 00:17 /opt/mogdb/app/lib/proc_srclib/libgs_plug.so

验证

  • 链接mogdb
[omm@vmpc ~]$ pgcli -p 26000 -d postgres
Server: PostgreSQL 9.2.4
Version: 3.4.1
Home: http://pgcli.com
postgres>
  • 创建C FUNCTION
postgres> CREATE FUNCTION add_ab(a int ,b int ) RETURNS integer
 AS 'testfunc.so', 'add_ab'
 LANGUAGE C STRICT;
CREATE FUNCTION
Time: 0.039s
  • 查看函数
    在这里插入图片描述

  • 调用函数

postgres> select add_ab(a := 4, b := 2);
+--------+
| add_ab |
|--------|
| 6      |
+--------+
SELECT 1
Time: 0.033s
postgres>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏 克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值