toastinfo
显示TOAST字段的详细信息
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
toastinfo | 1.7 | STAT | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 6530 | toastinfo | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | pageinspect pg_visibility pgstattuple amcheck pg_relusage pg_buffercache pg_freespacemap pg_repack |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.7 | 1817161514 | toastinfo | - |
| RPM | PIGSTY | 1.7 | 1817161514 | toastinfo_$v | - |
| DEB | PGDG | 1.7 | 1817161514 | postgresql-$v-toastinfo | - |
构建
您可以使用 pig build 命令构建 toastinfo 扩展的 RPM 包:
pig build pkg toastinfo # 构建 RPM 包
安装
您可以直接安装 toastinfo 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
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 README、upstream tags、PGDG 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 元数据记录
toastinfo1.6 覆盖 PostgreSQL 14-18,并同时有 Pigsty RPM 和 PGDG DEB。 - 上游 GitHub README 记录的是相同 SQL 表面;但评审时公开 GitHub tags 只可见到
v1.5,在该仓库中没有找到上游 1.6 changelog。 pg_toastpointer只对行外 toasted 数据有意义;普通、行内或 NULL 值都会返回 NULL。