storage_engine

带向量化执行的 colcompress 与 rowcompress 表访问方法

概览

扩展包名版本分类许可证语言
storage_engine1.0.7OLAPAGPL-3.0C
ID扩展名BinLibLoadCreateTrustReloc模式
2450storage_engineengine

release 1.0.7; SQL v1.0

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY1.0.71817161514storage_engine-
RPMPIGSTY1.0.71817161514storage_engine_$v-
DEBPIGSTY1.0.71817161514postgresql-$v-storage-engine-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
d13.x86_64
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
d13.aarch64
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
u22.x86_64
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
u22.aarch64
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
u24.x86_64
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
u24.aarch64
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7

构建

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

pig build pkg storage_engine         # 构建 RPM / DEB 包

安装

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

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

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

pig install storage_engine;          # 当前活跃 PG 版本安装
pig ext install -y storage_engine -v 18  # PG 18
pig ext install -y storage_engine -v 17  # PG 17
pig ext install -y storage_engine -v 16  # PG 16
pig ext install -y storage_engine -v 15  # PG 15
pig ext install -y storage_engine -v 14  # PG 14
dnf install -y storage_engine_18       # PG 18
dnf install -y storage_engine_17       # PG 17
dnf install -y storage_engine_16       # PG 16
dnf install -y storage_engine_15       # PG 15
dnf install -y storage_engine_14       # PG 14
apt install -y postgresql-18-storage-engine   # PG 18
apt install -y postgresql-17-storage-engine   # PG 17
apt install -y postgresql-16-storage-engine   # PG 16
apt install -y postgresql-15-storage-engine   # PG 15
apt install -y postgresql-14-storage-engine   # PG 14

预加载配置

shared_preload_libraries = 'storage_engine';

创建扩展

CREATE EXTENSION storage_engine;

用法

来源:README, release 1.0.7, META.json

storage_engineengine schema 中提供两种 PostgreSQL table access method:

  • colcompress:面向列式压缩存储,支持 vectorized execution、min/max pruning 与 parallel scan。
  • rowcompress:面向行批压缩,支持 parallel scan。
CREATE EXTENSION storage_engine;

快速开始

使用任一 access method 建表:

CREATE TABLE events (
  ts timestamptz NOT NULL,
  user_id bigint,
  event_type text,
  value float8
) USING colcompress;

CREATE TABLE logs (
  id bigserial,
  logged_at timestamptz NOT NULL,
  message text
) USING rowcompress;

主要调优旋钮

上游文档列出的 session 级 GUC 包括:

  • storage_engine.enable_parallel_execution
  • storage_engine.enable_vectorization
  • storage_engine.enable_column_cache
  • storage_engine.enable_columnar_index_scan
  • storage_engine.enable_dml
  • storage_engine.stripe_row_limit
  • storage_engine.chunk_group_row_limit
  • storage_engine.compression_level

README 说明这些 GUC 会在库被加载后可见;如果希望每个 session 一开始就可用,可把 storage_engine 加入 shared_preload_libraries

常用管理函数

用于 colcompress

SELECT engine.alter_colcompress_table_set(
  'events'::regclass,
  orderby => 'ts ASC, user_id ASC',
  compression => 'zstd',
  compression_level => 9
);

SELECT engine.colcompress_merge('events');
SELECT engine.colcompress_repack('events');

用于 rowcompress

SELECT engine.alter_rowcompress_table_set(
  'logs'::regclass,
  batch_size => 10000,
  compression => 'zstd',
  compression_level => 5
);

SELECT engine.rowcompress_repack('logs');

何时选择哪种 AM

  • colcompress 适合分析扫描、聚合与范围谓词,这类场景能受益于列裁剪、vectorization 以及 stripe/chunk pruning。
  • rowcompress 适合追加型日志或通常会整行一起读取的宽表,此时压缩收益往往高于列投影。
  • colcompress 的点查,上游建议启用 storage_engine.enable_columnar_index_scan 或 per-table index_scan

注意事项

  • colcompressrowcompress 都不支持 foreign key 或 AFTER ROW triggers。
  • 不支持 VACUUM FULL,也不支持 CREATE UNLOGGED TABLE ... USING colcompress;上游建议改用扩展自带的 repack 函数。
  • colcompress 上,orderby 与 B-tree index 组合可能禁用 sort-on-write 路径;如果全局顺序重要,请在装载数据后运行 engine.colcompress_merge()

最后修改 2026-04-19: update extension stub docs (aa5941a)