这是一个基于WasmEdge的完整成熟的openGauss WebAssembly运行时,提供了一种创新方式来扩展openGauss数据库的功能。该项目受https://github.com/wasmerio/wasmer-postgres%E5%90%AF%E5%8F%91%EF%BC%8C%E5%85%81%E8%AE%B8%E9%80%9A%E8%BF%87WebAssembly%E6%A8%A1%E5%9D%97%E5%9C%A8openGauss%E4%B8%AD%E6%89%A7%E8%A1%8C%E8%87%AA%E5%AE%9A%E4%B9%89%E9%80%BB%E8%BE%91%E3%80%82
注意:该项目仍在积极开发中,当前版本为0.1.0,部分API尚未实现,但已可用于体验和测试。
wasmedge API模仿标准WebAssembly API,降低使用门槛wasmedge以接近原生速度执行WebAssembly模块,性能优异适用于需要扩展openGauss数据库功能的场景,特别是:
该项目包含两部分组件:
需先安装WasmEdge,详细安装指南参见WasmEdge官方文档。
shell# 编译共享库 $ make # 安装扩展到openGauss $ make install # 激活并初始化扩展 $ gsql -d postgres -c 'CREATE EXTENSION wasm_executor'
安装完成后,将创建wasm_new_instance函数,用于实例化WebAssembly模块。
以Rust编写的sum函数为例:
rust#[no_mangle] pub extern fn sum(x: i32, y: i32) -> i32 { x + y }
环境准备
安装Rust和WebAssembly工具链:
shell# 安装Rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # 添加wasm目标 rustup target add wasm32-unknown-unknown # 安装wasm-gc(用于压缩wasm文件) cargo install wasm-gc
创建项目并配置
shellcargo new hello --lib
修改Cargo.toml,添加[lib]部分:
toml[package] name = "hello" version = "0.1.0" edition = "2021" [dependencies] [lib] crate-type = ["cdylib"]
编译为WebAssembly
shell# 编译为wasm cargo build --target wasm32-unknown-unknown --release # 压缩wasm文件 wasm-gc target/wasm32-unknown-unknown/release/hello.wasm
实例化WebAssembly模块
使用wasm_new_instance函数创建实例,需提供两个参数:
sql-- 实例化sum.wasm模块,命名空间为'wasm' SELECT wasm_new_instance('/absolute/path/to/sum.wasm', 'wasm');
调用WebAssembly函数
实例化后,将创建wasm_sum函数(命名空间+原函数名):
sql-- 调用WebAssembly导出的sum函数 SELECT wasm_sum(1, 2); -- 输出结果: -- wasm_sum -- -------- -- 3 -- (1 row)
目前支持的WebAssembly类型与openGauss类型映射:
i32 → integeri64 → bigint推荐使用Docker镜像快速体验:
shell# 拉取镜像 docker pull opengauss/wasmedge:0.2.0 # 运行容器 docker run -it opengauss/wasmedge:0.2.0 bash
Docker镜像中已预装Rust和WebAssembly工具链,可直接使用。
扩展提供了wasm外部模式下的两个表,用于管理WebAssembly实例:
wasm.instances表包含已创建的WebAssembly实例信息:
id: 实例IDwasm_file: WebAssembly模块路径sql-- 查询所有WebAssembly实例 SELECT * FROM wasm.instances; -- 示例输出: -- id | wasm_file -- ---------------+------------------------------- -- 2785875771 | /absolute/path/to/sum.wasm -- (1 row)
wasm.exported_functions表包含导出函数信息:
instanceid: 实例IDfuncname: 函数名inputs: 输入类型(已格式化为openGauss类型)output: 输出类型(已格式化为openGauss类型)sql-- 查询特定实例的导出函数 SELECT funcname, inputs, outputs FROM wasm.exported_functions WHERE instanceid = 2785875771; -- 示例输出: -- name | inputs | outputs -- --------+-----------------+--------- -- wasm_sum | integer,integer | integer -- (1 row)
以下基准测试显示WebAssembly作为数据库扩展语言的性能优势(与PL/pgSQL对比):
| 基准测试 | 运行时 | 时间 (ms) | 性能比 |
|---|---|---|---|
| Fibonacci (n = 50) | openGauss-wasm-executor | 0.765 | 1× |
| PL/pgSQL | 1.714 | 2× | |
| Fibonacci (n = 500) | openGauss-wasm-executor | 0.794 | 1× |
| PL/pgSQL | 9.746 | 12× | |
| Fibonacci (n = 5000) | openGauss-wasm-executor | 0.820 | 1× |
| PL/pgSQL | 92.720 | 113× |
注意:基准测试结果仅供参考,实际性能可能因环境而异。
整个项目采用MulanPSL2许可证。详情请阅读LICENSE文件。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务