PostgreSQL pg_size_pretty() 函数使用指南
PostgreSQL pg_size_pretty() 是一个非常实用且高频使用的系统管理与格式化函数。在 PostgreSQL 运维监控与性能调优中,底层磁盘计算函数(如 pg_relation_size()、pg_database_size()、pg_tablespace_size())返回的均是原始的 64 位整数字节数(Bytes)。面对上百亿甚至数万亿的字节长串,肉眼难以直观判断其规模。
pg_size_pretty() 专门用于将庞大的字节数值转换为带合适单位的人类可读字符串(如 15 kB、240 MB、18 GB、3.5 TB),是构建 DBA 监控看板与空间统计报表的必备利器。
PostgreSQL pg_size_pretty() 语法
这里是 PostgreSQL pg_size_pretty() 函数的语法形式:
pg_size_pretty(bytes)
PostgreSQL 内部提供了两个重载版本以适配不同精度的入参:
pg_size_pretty(bigint) -> textpg_size_pretty(numeric) -> text
参数
bytes- 必需的。一个表示物理存储字节总数的数值,数据类型可为
bigint或numeric。
返回值
返回一个表示格式化存储大小的 text 字符串。
- 该函数依据 1024 进制(二进制乘数标准)自动递进单位:
bytes->kB->MB->GB->TB。 - 如果参数为
NULL,则返回NULL。
PostgreSQL pg_size_pretty() 示例
以下示例演示从基础数值转换到实战数据库表空间统计的常见场景。
基础数值格式化转换
SELECT
pg_size_pretty(8192::bigint) AS size_kb,
pg_size_pretty(10485760::bigint) AS size_mb,
pg_size_pretty(107374182400::bigint) AS size_gb,
pg_size_pretty(10995116277760::bigint) AS size_tb;
输出:
size_kb | size_mb | size_gb | size_tb
---------+---------+---------+---------
8192 bytes | 10 MB | 100 GB | 10 TB联动查看当前数据库总容量
结合 pg_database_size() 查看当前登录数据库的直观大小:
SELECT
current_database() AS db_name,
pg_size_pretty(pg_database_size(current_database())) AS pretty_size;
输出:
db_name | pretty_size
-----------+-------------
postgres | 74 MB查询库中物理空间占用前 3 大的数据表
SELECT
relname AS table_name,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 3;
输出:
table_name | total_size
--------------+------------
orders | 1520 MB
order_items | 890 MB
audit_events | 430 MB结论
pg_size_pretty()采用 1024 作为进位基数,单位显示符合操作系统与存储工程师的通用阅读习惯。- 该函数仅用于最终的用户界面或报告展示,不应用于
WHERE子句或ORDER BY排序,因为格式化后的字符串排序(例如'10 MB' < '2 GB')会丧失真实数值大小顺序。