openGauss 插件开发入门

openGauss 插件开发入门

一、插件的开发与安装

插件名为timeflux。首先创建目录timeflux:

cd openGauss-server/contrib/
mkdir timeflux
cd timeflux/

最基本的demo包括四个核心文件:timeflux.cpptimeflux--1.0.sqltimeflux.controlMakefile。在目录timeflux下创建上述四个文件,分别写入如下内容:

  • timeflux.cpp
    demo的核心,对函数的功能进行实现。该demo的功能是实现函数timeflux_verify(),输出字符串信息以验证插件被成功加载。
#include "postgres.h"
#include "fmgr.h"
#include "utils/builtins.h"
#include "utils/elog.h"

PG_MODULE_MAGIC;

extern "C" Datum timeflux_verify(PG_FUNCTION_ARGS);

PG_FUNCTION_INFO_V1(timeflux_verify);

Datum timeflux_verify(PG_FUNCTION_ARGS) {
    PG_RETURN_TEXT_P(cstring_to_text("[TimeFlux-Simple] SUCCESS! Plugin code is fully active and callable."));
}

void _PG_init(void) {
    elog(NOTICE, "timeflux plugin loaded!");
}

void _PG_fini(void) {
    elog(NOTICE, "timeflux plugin unloaded!");
}
  • timeflux--1.0.sql
    用于创建SQL函数timeflux_verify(),与文件timeflux.cpp中的函数进行联动,用于在数据库客户端调用。
CREATE OR REPLACE FUNCTION timeflux_verify()
RETURNS text
AS 'MODULE_PATHNAME', 'timeflux_verify'
LANGUAGE C STRICT IMMUTABLE;
  • timeflux.control
    demo的一些配置信息。
# timeflux extension
comment = 'TimeFlux+: Advanced Time-Series Storage Engine'
default_version = '1.0'
module_pathname = '$libdir/timeflux'
relocatable = true
  • Makefile
    用于构建demo
MODULES = timeflux
EXTENSION = timeflux
DATA = timeflux--1.0.sql
REGRESS = timeflux

# 使用PostgreSQL/OpenGauss的构建基础设施
ifdef USE_PGXS
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
else
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
endif

编写好上述文件后,执行编译安装:

make
make install

确保数据库服务已启动,连接数据库:

gsql -d postgres -p 5432 -r

创建插件并调用函数,出现下图输出即表示成功创建并安装插件:

CREATE EXTENSION timeflux;

SELECT timeflux_verify();

成功创建并安装插件的输出结果

二、插件的卸载

首先在数据库中执行如下操作:

-- 1. 首先,删除插件在 pg_depend 中的依赖记录(关键步骤)
DELETE FROM pg_depend WHERE refobjid = (SELECT oid FROM pg_extension WHERE extname = 'timeflux');
-- 2. 然后,删除插件在 pg_extension 中的主记录
DELETE FROM pg_extension WHERE extname = 'timeflux';

-- 3. 验证是否删除成功。如果查询返回0行,说明清理成功。
SELECT * FROM pg_extension WHERE extname = 'timeflux';

接着退出数据库,在主机中执行如下操作:

cd openGauss-server/mppdb_temp_install/lib/postgresql/
rm -rf timeflux.so
posted @ 2026-01-28 16:20  碧波蔚蓝  阅读(14)  评论(0)    收藏  举报