pg_protobuf
提供Protobuf函数支持
仓库
afiskon/pg_protobuf
https://github.com/afiskon/pg_protobuf
源码
pg_protobuf-1.0.tar.gz
pg_protobuf-1.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_protobuf | 1.0 | UTIL | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4120 | pg_protobuf | 否 | 是 | 否 | 是 | 否 | 是 | - |
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.0 | 1817161514 | pg_protobuf | - |
| RPM | PIGSTY | 1.0 | 1817161514 | pg_protobuf_$v | - |
| DEB | PIGSTY | 1.0 | 1817161514 | postgresql-$v-pg-protobuf | - |
构建
您可以使用 pig build 命令构建 pg_protobuf 扩展的 RPM / DEB 包:
BASH
安装
您可以直接安装 pg_protobuf 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
BASH
使用 pig 或者是 apt/yum/dnf 安装扩展:
安装
BASH
pig
BASH
dnf
BASH
apt
BASH
创建扩展:
SQL
用法
该扩展提供无需 schema 定义即可在 SQL 中直接解码 Protocol Buffer 二进制数据的函数。
函数
protobuf_decode(bytea) RETURNS cstring– 将 protobuf 二进制数据解码为可读格式protobuf_get_int(bytea, int) RETURNS bigint– 按字段编号提取整数字段protobuf_get_string(bytea, int) RETURNS text– 按字段编号提取字符串字段protobuf_get_bytes(bytea, int) RETURNS bytea– 按字段编号提取原始字节protobuf_get_bool(bytea, int) RETURNS boolean– 按字段编号提取布尔字段protobuf_get_float(bytea, int) RETURNS real– 按字段编号提取浮点字段protobuf_get_double(bytea, int) RETURNS double precision– 按字段编号提取双精度字段protobuf_get_sfixed32(bytea, int) RETURNS int– 提取有符号定长 32 位字段protobuf_get_sfixed64(bytea, int) RETURNS bigint– 提取有符号定长 64 位字段protobuf_get_int_multi(bytea, int) RETURNS bigint[]– 提取重复整数字段protobuf_get_string_multi(bytea, int) RETURNS text[]– 提取重复字符串字段protobuf_get_bytes_multi(bytea, int) RETURNS bytea[]– 提取重复字节字段protobuf_get_bool_multi(bytea, int) RETURNS boolean[]– 提取重复布尔字段protobuf_get_float_multi(bytea, int) RETURNS real[]– 提取重复浮点字段protobuf_get_double_multi(bytea, int) RETURNS double precision[]– 提取重复双精度字段protobuf_get_sfixed32_multi(bytea, int) RETURNS int[]– 提取重复 sfixed32 字段protobuf_get_sfixed64_multi(bytea, int) RETURNS bigint[]– 提取重复 sfixed64 字段
示例
SQL
限制
- 不支持修改 Protobuf 数据
- 枚举值可通过
protobuf_get_int读取 - 不直接支持无符号类型(PostgreSQL 中没有无符号整数)
*_multi函数不支持[packed=true](可改用protobuf_get_bytes*)