pg_variables
提供标量、数组和记录类型的会话变量
仓库
postgrespro/pg_variables
https://github.com/postgrespro/pg_variables
源码
pg_variables-1.2.5.tar.gz
pg_variables-1.2.5.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_variables | 1.2.5 | FEAT | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2820 | pg_variables | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | session_variable orafce plisql |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.2.5 | 1817161514 | pg_variables | - |
| RPM | PIGSTY | 1.2.5 | 1817161514 | pg_variables_$v | - |
| DEB | PIGSTY | 1.2.5 | 1817161514 | postgresql-$v-pg-variables | - |
构建
您可以使用 pig build 命令构建 pg_variables 扩展的 RPM / DEB 包:
pig build pkg pg_variables # 构建 RPM / DEB 包
安装
您可以直接安装 pg_variables 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_variables; # 当前活跃 PG 版本安装
pig ext install -y pg_variables -v 18 # PG 18
pig ext install -y pg_variables -v 17 # PG 17
pig ext install -y pg_variables -v 16 # PG 16
pig ext install -y pg_variables -v 15 # PG 15
pig ext install -y pg_variables -v 14 # PG 14
dnf install -y pg_variables_18 # PG 18
dnf install -y pg_variables_17 # PG 17
dnf install -y pg_variables_16 # PG 16
dnf install -y pg_variables_15 # PG 15
dnf install -y pg_variables_14 # PG 14
apt install -y postgresql-18-pg-variables # PG 18
apt install -y postgresql-17-pg-variables # PG 17
apt install -y postgresql-16-pg-variables # PG 16
apt install -y postgresql-15-pg-variables # PG 15
apt install -y postgresql-14-pg-variables # PG 14
创建扩展:
CREATE EXTENSION pg_variables;
用法
语法:
CREATE EXTENSION pg_variables; SELECT pgv_set('vars', 'int1', 101); SELECT pgv_get('vars', 'int1', NULL::int);来源:README
pg_variables 为 PostgreSQL 提供会话级变量。变量按 package 分组,只在当前会话中可见,并且可以配置为事务性或非事务性。
基本行为
默认情况下,变量不是事务性的,不会受 BEGIN、COMMIT 或 ROLLBACK 影响。pgv_set() 的可选参数 is_transactional 可以改变这一行为。
SELECT pgv_set('vars', 'int1', 101);
SELECT pgv_get('vars', 'int1', NULL::int);
事务性示例:
BEGIN;
SELECT pgv_set('vars', 'trans_int', 101, true);
SAVEPOINT sp1;
SELECT pgv_set('vars', 'trans_int', 102, true);
ROLLBACK TO sp1;
COMMIT;
SELECT pgv_get('vars', 'trans_int', NULL::int);
Package
变量按 package 分组,因此可以在同一会话中并存多个命名变量,也可以一次性删除整组变量。README 说明空 package 会自动删除。
核心函数
标量与数组变量
通用 API 如下:
pgv_set(package text, name text, value anynonarray, is_transactional bool default false)
pgv_get(package text, name text, var_type anynonarray, strict bool default true)
pgv_set(package text, name text, value anyarray, is_transactional bool default false)
pgv_get(package text, name text, var_type anyarray, strict bool default true)
pgv_get() 会同时检查变量是否存在及其类型。如果 package 或变量缺失,行为取决于 strict。
记录集合
README 还记录了面向 record 的操作:
pgv_insert()pgv_update()pgv_delete()pgv_select()
这些函数用于操作存放在某个 package 和变量名下的记录集合。
已废弃的辅助函数
项目仍保留一些旧的类型专用辅助函数,例如:
pgv_set_int()/pgv_get_int()pgv_set_text()/pgv_get_text()pgv_set_numeric()/pgv_get_numeric()pgv_set_timestamp()/pgv_get_timestamp()pgv_set_timestamptz()/pgv_get_timestamptz()pgv_set_date()/pgv_get_date()pgv_set_jsonb()/pgv_get_jsonb()
README 将这些函数标记为已废弃,建议改用通用的 pgv_set() / pgv_get() API。