暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

OpenTenBase V5尝鲜记:让数据库"学会"思考

原创 NickYoung 2025-09-15
315

本篇我们简单体验下OpenTenBase-V5, V5主打Oracle兼容性,不过老杨这次不打算验证这里。主要围绕编译安装集中式以及opentenbase_ai扩展测试。

opentenbase_ai简介

直接引用官方介绍: “opentenbase_ai 插件为 PostgreSQL 数据库提供了集成人工智能大语言模型能力的接口,让您能够直接在 SQL 中使用 AI 功能。该插件支持多种 AI 模型提供商(包括 OpenAI、DeepSeek、腾讯混元、阿里通义千问等),提供文本生成、翻译、情感分析、问答提取、文本摘要、嵌入向量生成以及图像分析等功能”[1]。

opentenbase_ai原理也很简单,和pgsql-http插件组合使用。从代码[2]来看,主要是opentenbase_ai–1.0.sql定义了一些sql函数和表,用来拼接http body,调用pgsql-http提供的函数curl https发起请求,并接收结果在数据库中格式化展示。ai.c文件中主要是自定义了几个guc,用来控制大模型选型等。

编译安装OpenTenBase

代码下载

https://github.com/OpenTenBase/OpenTenBase/tree/v5.0-release_new

系统要求

Memory: 4G RAM

OS: TencentOS 2, TencentOS 3, OpenCloudOS, CentOS 7, CentOS 8, Ubuntu

编译安装还是花了点精力,可能和老杨选择的操作系统版本太新相关,云服务器安装的os为TencentOS Server 4.4,编译时还算踩了一些坑,给大家分享下编译过程。

1. 安装依赖

yum install -y libxml2-devel crypto-devel zstd libzstd-devel lz4 lz4-devel
yum install -y libuuid-devel openssl openssl-devel zlib zlib-devel gcc make
yum install -y readline-devel bison flex uuid-devel uuid libcurl-devel
2. configure:

这里费了些功夫,主要是configure文件中一些链接库的路径和安装的操作系统中的不一致,找不到zstd、lz4等一些链接库;另外还有一些代码规范性、库函数弃用等问题导致的编译告警报错。

所以我编译测试了好几次,才整体编译成功。

给产品提个建议,当然是我个人看法:可以针对适配操作系统直接出对应的third-party library包,下载后设置好3rdpartydir路径变量,编译时直接使用指定的3方库,这样会方便很多。

设置CFLAGS:
主要是保留符号表便于debug,同时忽略一些编译告警,以及指定链接库。

export CFLAGS='-g -Wall -O0 -Werror=unused-function -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv -ggdb -g3 -Wno-deprecated-declarations -Wno-maybe-uninitialized -Wno-declaration-after-statement -Wno-format-overflow -Wno-misleading-indentation -I/usr/include/libxml2 -DUSE_LIBXML=1'

修改configure文件:

12837: #LIBS="/usr/local/lib/libzstd.a -lpthread $LIBS" 12838: LIBS="-lzstd $LIBS" 12887: #LIBS="/usr/local/lib/liblz4.a $LIBS" 12888: LIBS="-llz4 $LIBS"

执行configure:

LIBS='-lssl -lcrypto -llz4 -lzstd -lz -lreadline -lcrypt -lm -lxml2' ac_cv_lib_zstd_ZSTD_compress=yes ac_cv_lib_lz4_LZ4_compress_default=yes ac_cv_lib_crypto_CRYPTO_new_ex_data=yes ac_cv_lib_ssl_SSL_new=yes ac_cv_lib_uuid_uuid_generate=yes ac_cv_lib_uuid_uuid_export=yes ./configure --prefix=/data/opentenbase/OpenTenBase-5.0-release_new/app --with-openssl --enable-debug --with-ossp-uuid --with-zstd --with-lz4

3. make && make install:

有一处代码隐患有编译告警,可以用CFLAG忽略,或者修改。这里我修改了下:

vim ./src/backend/postmaster/forwardrecv.c +949 //events = malloc(8 * sizeof(struct epoll_event)); events = malloc(32 * sizeof(struct epoll_event));

进行编译安装:

我一般只关注编译告警和报错,所以将标准输出定向到文件。

make -j 4 > make.log make install > make.log

4. initdb:

早先的版本是V2,属于PGXC分布式系。V5我们玩下集中式,所以不需要GTM、coordinator,initdb一个datanode即可。

将PATH、LD_LIBRARY_PATH写入.bashrc

export PATH=/data/opentenbase/OpenTenBase-5.0-release_new/app/bin:$PATH export LD_LIBRARY_PATH=/data/opentenbase/OpenTenBase-5.0-release_new/app/lib:$LD_LIBRARY_PATH

initdb:

initdb -U opentenbase -D /data/opentenbase/OpenTenBase-5.0-release_new/data -E=UTF-8 --nodename=dn1 --nodetype=datanode

修改配置参数: 主要是配置is_centralized_mode(集中式开关),allow_dml_on_datanode(datanode可写)

is_centralized_mode = on allow_dml_on_datanode = on

5. 安装opentenbase_ai:

依次编译pgsql-http和opentenbase_ai

[opentenbase@VM-16-13-tencentos contrib]$ cd pgsql-http/ [opentenbase@VM-16-13-tencentos pgsql-http]$ make && make install [opentenbase@VM-16-13-tencentos pgsql-http]$ cd ../opentenbase_ai [opentenbase@VM-16-13-tencentos opentenbase_ai]$ make && make install

启动实例:

pg_ctl start -D /data/opentenbase/OpenTenBase-5.0-release_new/data/ -Z datanode

创建node,default group:

psql (PostgreSQL 10.0 @ OpenTenBase_v5.21.8.11 OpenTenBase V5.21 2025-09-12 23:11:49) Type "help" for help. postgres=# create node dn1 with(TYPE='datanode',HOST='127.0.0.1',PORT=5432,PRIMARY='TRUE',PREFERRED='TRUE'); CREATE NODE postgres=# create default node group default_group with (dn1); CREATE NODE GROUP postgres=#

创建扩展:

postgres=# create extension plpgsql; CREATE EXTENSION postgres=# create extension opentenbase_ai cascade; NOTICE: (00000) installing required extension "http" CREATE EXTENSION postgres=#

测试opentenbase_ai

我们这里测试混元大模型,首先得获取自己的api token,可参考官方文档[3]

添加混元大模型的模型定义到模型元数据表中: 记得将your_hunyuan_api_key替换为自己的api token

postgres=# SELECT ai.add_completion_model( model_name => 'hunyuan_chat', uri => 'https://api.hunyuan.cloud.tencent.com/v1/chat/completions', default_args => '{"model": "hunyuan-lite"}'::jsonb, token => 'your_hunyuan_api_key', model_provider => 'tencent' ); add_completion_model ---------------------- t (1 row) postgres=#

配置混元大模型为默认模型

postgres=# SET ai.completion_model = 'hunyuan_chat'; SET postgres=#

测试
我主要测试了几个简单问答,挺有趣的。

postgres=# SELECT ai.generate('PostgreSQL的主要特点是什么?', NULL::text); generate ------------------------------------------------------------------------------------------------------------------------------------------ PostgreSQL(也称为 Postgres)是一个功能强大、开源的对象关系型数据库管理系统(ORDBMS) + + 1. 开源:PostgreSQL 是一个开源项目,使用的协议非常友好,这意味着任何人都可以访问其源代码,并根据自己的需要进行修改和分发。 + + 2. 兼容性:PostgreSQL 兼容多种数据格式,包括 SQL 标准、XML、JSON、CSV 等。这使得它能够轻松地与其他系统和应用程序集成。 + + 3. 高级功能:PostgreSQL 提供了许多高级功能,如事务支持、存储过程、触发器、视图、索引、全文搜索等。 + + 4. 可扩展性:PostgreSQL 支持自定义数据类型、函数、操作符等,这使得用户可以根据需要扩展数据库的功能。 + + 5. 性能优化:PostgreSQL 提供了丰富的性能优化工具和技术,如查询优化器、索引、分区、缓存等,以帮助用户提高数据库的性能。 + + 6. 安全性:PostgreSQL 提供了强大的安全功能,如 SSL 加密、角色和权限管理、审计日志等,以确保数据的完整性和安全性。 + + 7. 社区支持:PostgreSQL 有一个庞大的开发者社区,提供了大量的文档、教程、插件和第三方工具,以帮助用户更好地使用和维护 PostgreSQL 数据库。 (1 row) postgres=#
postgres=# SELECT ai.generate('介绍下TDSQL', NULL::text); generate ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------- 腾讯云的TDSQL(Tencent Distributed SQL)是腾讯云自主研发的新一代关系型云原生数据库,具有分布式设计的低成本优势和集中式的易用性。它采用存储计算分离设计,满足各种规模应用场景需求。 + + TDSQL兼容MySQL和PostgreSQL,支持存储弹性扩展,一主多从共享数据,性能超越社区原生MySQL和PostgreSQL。TDSQL采用shared storage架构,其弹性扩展和高性价比的基石则是CynosDB-Proxy。此外,TDSQL支持多地多活 署,单集群规模支持100+节点,同时支持多地多活部署。+ + TDSQL采用shared storage架构,其弹性扩展和高性价比的基石则是CynosDB-Proxy。CynosDB-Proxy作为腾讯云分布式数据库集群的管理模块,为用户提供统一的数据库管理平台,屏蔽底层差异,简化运维工作。 + + 总的来说,TDSQL是腾讯云推出的一款高性能、高性价比的关系型数据库,适用于各种规模的应用场景。 (1 row) postgres=#
postgres=# SELECT ai.generate('计算 123 * 456 的结果', NULL::integer); generate ---------- 138528 (1 row) postgres=#
postgres=# SELECT ai.generate('鸡你太美是什么意思', NULL::text); generate ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------- "鸡你太美"是一句网络流行语,为2016年11月29日SWIN-S发布的歌曲《只因你太美》的空耳。出自于蔡徐坤在综艺节目《偶像练习生》之中的自我介绍表演。原歌词的“只因你太美”被网友误听为“鸡你太美”,从而将“只因”误 为“鸡”,产生了这个网络梗。这个词语后来被部分网友用来恶意嘲讽蔡徐坤为代表的流量明星,并用这段音乐制作鬼畜恶搞视频,上传到网络上的各个平台,逐渐成为网络热梗。+ + 该词的社会影响较大,引发了关于网络暴力和恶俗烂梗的讨论。2023年3月7日,“人民热评:鸡你太美是恶俗烂梗”的相关话题登上微博热搜第一。这种恶俗烂梗会给一些人带来无形的霸凌,严重影响他们的生活。因此,我们 该共同维护网络健康,文明用语,共享绿色心灵。 (1 row) postgres=#

好了,就先玩到这,可以参考官方文档[1]测试其他功能。
Clipboard_Screenshot_1757946095.png

总结

本篇介绍了OpenTenBase-V5集中式的编译安装过程,以及opentenbase_ai扩展的配置和简单使用,挺有趣的,推荐大家试玩。

另外我个人感觉提供适配3方库对编译安装来说挺方便的,建议产品侧可以斟酌下。

Reference:

[1]
https://docs.opentenbase.org/guide/23-opentenbase_ai/

[2]
https://github.com/OpenTenBase/OpenTenBase/tree/v5.0-release_new/contrib/opentenbase_ai

[3]
https://cloud.tencent.com/document/product/1729/111008

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论