pg_variables

提供标量、数组和记录类型的会话变量

概览

扩展包名版本分类许可证语言
pg_variables1.2.5FEATPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
2820pg_variables-
相关扩展session_variable orafce plisql

Release tag 1.2.5 still ships extension SQL version 1.2.

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY1.2.51817161514pg_variables-
RPMPIGSTY1.2.51817161514pg_variables_$v-
DEBPIGSTY1.2.51817161514postgresql-$v-pg-variables-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
d13.x86_64
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
d13.aarch64
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
u22.x86_64
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
u22.aarch64
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
u24.x86_64
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
u24.aarch64
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
u26.x86_64
u26.aarch64
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5
PIGSTY 1.2.5

构建

您可以使用 pig build 命令构建 pg_variables 扩展的 RPM / DEB 包:

pig build pkg pg_variables         # 构建 RPM / DEB 包

安装

您可以直接安装 pg_variables 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

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;

用法

pg_variables 提供按名称 package 分组的会话级变量。变量只存在于当前 session;除非创建时指定 is_transactional := true,否则默认不参与事务。

基本读写

CREATE EXTENSION pg_variables;

SELECT pgv_set('vars', 'int1', 101);
SELECT pgv_get('vars', 'int1', NULL::int);

事务性变量会参与 savepoint 和 rollback:

BEGIN;
SELECT pgv_set('vars', 'trans_int', 101, true);
SAVEPOINT sp1;
SELECT pgv_set('vars', 'trans_int', 102, true);
ROLLBACK TO sp1;
COMMIT;

核心 API

README 记录了通用标量与数组 API:

  • pgv_set(package, name, value, is_transactional default false)
  • pgv_get(package, name, NULL::type, strict default true)

同时也记录了面向 record 的 API:

  • pgv_insert()
  • pgv_update()
  • pgv_delete()
  • pgv_select()

常用的管理辅助函数包括 pgv_exists()pgv_remove()pgv_free()pgv_list()pgv_stats()

错误与 strict 行为

pgv_get() 会同时检查变量是否存在以及类型是否匹配。README 展示了 package 不存在、变量不存在或类型不匹配时会抛错;如果指定 strict := false,则在值缺失时返回 NULL

已废弃辅助函数与版本说明

上游仍然提供一些已废弃的类型专用辅助函数,例如 pgv_set_int() / pgv_get_int()pgv_set_jsonb() / pgv_get_jsonb(),但推荐使用通用的 pgv_set() / pgv_get()

仓库 tag 已到 v1.2.5,而当前 pg_variables.control 仍声明 default_version = '1.2'。这与打包说明一致,即 release tag 已前进,但 SQL 扩展版本字符串没有同步变更。


最后修改 2026-05-01: update extension data (e399d22)