PostgreSQL 表空间估算器
按表结构(列类型、字符编码、块大小、TOAST 与 B-Tree 索引、填充率),估算 PostgreSQL 堆表与索引的磁盘占用,辅助容量规划与表结构设计。
功能特性
基于 23 字节堆元组头、8 字节 MAXALIGN 对齐填充、NULL 位图与变长 varlena 头估算行内占用。
变长列超过约 2KB 时启用 TOAST 压缩并溢出至 TOAST 表,可配置压缩率。
增删列与 B-Tree 二级索引即时计算堆表与索引磁盘占用。
所有估算在浏览器本地完成,无需上传表结构。
使用步骤
选择字符编码、块大小、行数、填充率、TOAST 开关与压缩率。
添加并配置列的类型、长度/精度、平均长度、是否可空与是否主键。
勾选索引包含的列,并设置是否唯一(B-Tree)。
查看空间构成与优化建议,一键复制评估报告。
适用场景
常见问题
估算包含 TOAST 的实际数据吗?
包含。当变长列(text/varchar/bytea/json/jsonb)平均超过约 2KB 且启用 TOAST 时,行内仅留 18 字节指针,其余按「压缩率」计入 TOAST 表;关闭 TOAST 则大字段全部留在堆表行内。
为什么列之间会有对齐填充?
PostgreSQL 在 64 位系统按 8 字节 MAXALIGN 对齐,列之间可能插入填充字节(例如 bigint 后的 boolean 会被对齐到 8 字节边界),这会抬高实际行大小,与 MySQL 不同。
主键(聚簇)怎么计费?
PostgreSQL 堆表本身即数据,主键是堆上的约束而非单独的聚簇索引;但每个二级索引叶子元组都额外携带 6 字节堆 TID 指针以定位行。
块大小有什么影响?
PostgreSQL 默认块大小 8KB(编译期设定)。块越大单次 I/O 吞吐越高但浪费空间的概率增加;此处可切换以估算不同 BLCKSZ 下的页数。
估算结果准确吗?
估算基于堆元组结构、对齐填充、TOAST、B-Tree 索引元组(含 6 字节 TID 与约 10% 内部页开销)与填充率模型,结果接近真实占用,但未计入空闲空间映射(FSM)、可见性映射(VM)、膨胀与碎片,结果仅供参考。