pg_regresql

用 pg_class 统计信息替代物理文件大小参与查询规划

概览

扩展包名版本分类许可证语言
pg_regresql2.0.0LANGBSD-2-ClauseC
ID扩展名BinLibLoadCreateTrustReloc模式
3230pg_regresql-
相关扩展pg_hint_plan hypopg plan_filter auto_explain

Activate it with LOAD pg_regresql or session_preload_libraries.

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY2.0.01817161514pg_regresql-
RPMPIGSTY2.0.01817161514pg_regresql_$v-
DEBPIGSTY2.0.01817161514postgresql-$v-pg-regresql-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
d12.aarch64
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
d13.x86_64
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
d13.aarch64
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
u22.x86_64
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
u22.aarch64
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
u24.x86_64
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
u24.aarch64
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0
PIGSTY 2.0.0

构建

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

pig build pkg pg_regresql         # 构建 RPM / DEB 包

安装

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

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg_regresql;          # 当前活跃 PG 版本安装
pig ext install -y pg_regresql -v 18  # PG 18
pig ext install -y pg_regresql -v 17  # PG 17
pig ext install -y pg_regresql -v 16  # PG 16
pig ext install -y pg_regresql -v 15  # PG 15
pig ext install -y pg_regresql -v 14  # PG 14
dnf install -y pg_regresql_18       # PG 18
dnf install -y pg_regresql_17       # PG 17
dnf install -y pg_regresql_16       # PG 16
dnf install -y pg_regresql_15       # PG 15
dnf install -y pg_regresql_14       # PG 14
apt install -y postgresql-18-pg-regresql   # PG 18
apt install -y postgresql-17-pg-regresql   # PG 17
apt install -y postgresql-16-pg-regresql   # PG 16
apt install -y postgresql-15-pg-regresql   # PG 15
apt install -y postgresql-14-pg-regresql   # PG 14

预加载配置

shared_preload_libraries = 'pg_regresql';

创建扩展

CREATE EXTENSION pg_regresql;

用法

语法:

regresql init postgres://localhost/mydb
regresql add src/sql/
regresql update
regresql test

来源:README产品页

RegreSQL 在上游被定位为一个与语言无关的 PostgreSQL SQL 回归测试工具,而不是数据库内的 CREATE EXTENSION 式模块。它会发现 .sql 文件、在 PostgreSQL 上执行这些文件、保存期望输出,并跟踪查询计划变化。

快速上手

README 给出的基本流程是:

regresql init postgres://localhost/mydb
regresql discover
regresql add src/sql/
regresql update
regresql test

这会初始化测试套件、发现查询文件、生成计划定义、捕获期望输出,并执行回归检查。

跟踪内容

上游文档重点关注:

  • 期望的查询输出快照
  • EXPLAIN 计划基线
  • 顺序扫描告警
  • 与迁移相关的查询回归
  • 面向 CI 的输出格式,例如 junitjsonpgtapgithub-actions

查询文件与计划

RegreSQL 使用普通 SQL 文件,并支持通过 -- name: 注释在单个文件中编排多个查询:

-- name: get-user-by-id
SELECT * FROM users WHERE id = :id;

计划文件用于提供测试参数:

"1":
  id: 42
"2":
  id: 100

快照与迁移

该工具可以构建和恢复数据库快照,并比较迁移前后的查询行为:

regresql snapshot build
regresql snapshot restore
regresql migrate --script db/migrations/001_add_column.sql

安装

README 说明可通过 Homebrew 或 Go 安装:

brew tap boringsql/boringsql
brew install regresql

或:

go install github.com/boringsql/regresql@latest

快照相关命令需要 pg_dumppg_restorepsql 等 PostgreSQL 客户端工具。


最后修改 2026-04-10: extension update (13b4540)