toastinfo

显示TOAST字段的详细信息

概览

扩展包名版本分类许可证语言
toastinfo1.7STATPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
6530toastinfo-
相关扩展pageinspect pg_visibility pgstattuple amcheck pg_relusage pg_buffercache pg_freespacemap pg_repack

版本

类型仓库版本PG 大版本包名依赖
EXTMIXED1.71817161514toastinfo-
RPMPIGSTY1.71817161514toastinfo_$v-
DEBPGDG1.71817161514postgresql-$v-toastinfo-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
u22.x86_64
u22.aarch64
u24.x86_64
u24.aarch64
u26.x86_64
u26.aarch64

构建

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

pig build pkg toastinfo         # 构建 RPM 包

安装

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

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

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

pig install toastinfo;          # 当前活跃 PG 版本安装
pig ext install -y toastinfo -v 18  # PG 18
pig ext install -y toastinfo -v 17  # PG 17
pig ext install -y toastinfo -v 16  # PG 16
pig ext install -y toastinfo -v 15  # PG 15
pig ext install -y toastinfo -v 14  # PG 14
dnf install -y toastinfo_18       # PG 18
dnf install -y toastinfo_17       # PG 17
dnf install -y toastinfo_16       # PG 16
dnf install -y toastinfo_15       # PG 15
dnf install -y toastinfo_14       # PG 14
apt install -y postgresql-18-toastinfo   # PG 18
apt install -y postgresql-17-toastinfo   # PG 17
apt install -y postgresql-16-toastinfo   # PG 16
apt install -y postgresql-15-toastinfo   # PG 15
apt install -y postgresql-14-toastinfo   # PG 14

创建扩展

CREATE EXTENSION toastinfo;

用法

来源:upstream READMEupstream tagsPGDG package metadata via local db/extension.csv

toastinfo 暴露 PostgreSQL 存储变长值(varlena)的方式,包括行内、压缩和行外 TOAST 存储形式。

函数

pg_toastinfo(anyelement) 描述一个 datum 的存储形式:

CREATE EXTENSION toastinfo;

SELECT a, length(b), pg_column_size(b), pg_toastinfo(b), pg_toastpointer(b)
FROM t;

可能的存储形式包括:

  • null,表示 NULL 值。
  • ordinary,表示非 varlena 数据类型。
  • short inline varlena,最多 126 字节,使用 1 字节头。
  • long inline varlena, uncompressed,最多 1 GiB,使用 4 字节头。
  • long inline varlena, compressed (pglz|lz4)
  • toasted varlena, uncompressed
  • toasted varlena, compressed (pglz|lz4)

在 PostgreSQL 14+ 上,压缩 varlena 会显示压缩方法。

pg_toastpointer(anyelement) 返回行外 toasted 值在 TOAST 表中的 chunk_id OID;对于非 toasted 输入返回 NULL:

SELECT pg_toastpointer(large_column)
FROM my_table;

存储示例

CREATE TABLE t (a text, b text);

ALTER TABLE t ALTER COLUMN b SET STORAGE EXTERNAL;
INSERT INTO t VALUES ('external-10000', repeat('x', 10000));

ALTER TABLE t ALTER COLUMN b SET STORAGE EXTENDED;
INSERT INTO t VALUES ('extended-1000000', repeat('x', 1000000));

ALTER TABLE t ALTER COLUMN b SET COMPRESSION lz4;
INSERT INTO t VALUES ('extended-lz4', repeat('x', 1000000));

SELECT a, pg_column_size(b), pg_toastinfo(b), pg_toastpointer(b)
FROM t;

注意事项

  • Pigsty 元数据记录 toastinfo 1.6 覆盖 PostgreSQL 14-18,并同时有 Pigsty RPM 和 PGDG DEB。
  • 上游 GitHub README 记录的是相同 SQL 表面;但评审时公开 GitHub tags 只可见到 v1.5,在该仓库中没有找到上游 1.6 changelog。
  • pg_toastpointer 只对行外 toasted 数据有意义;普通、行内或 NULL 值都会返回 NULL。

最后修改 2026-06-18: extension data update (63e2bd9)