pg_table_size()
是一个系统函数,用于确定关系(表、索引或物化视图)的磁盘大小。
pg_table_size()
在 PostgreSQL 9.0 中添加。
用法
pg_table_size (regclass
) →bigint
对于表,报告的大小包括实际表数据、任何 TOAST 表数据、空闲空间映射和可见性映射。任何索引的大小都不包含在总数中。
调用方不需要对关系有任何权限即可确定其大小。但是,表上的 ACCESS EXCLUSIVE
锁将导致函数暂停,直到锁被释放。
使用 pg_total_relation_size()
获取表总大小(包括任何索引);pg_indexes_size()
将返回与表关联的任何索引的总大小。
请注意,此函数的命名有点违反直觉,因为它可以用于检索任何关系的数据,而不仅仅是表。确实存在一个函数 pg_relation_size()
,但由于历史原因,它只会报告特定关系 分支 的大小。
源代码
pg_table_size()
的源代码包含在 src/backend/utils/adt/dbsize.c 中;主要工作由 calculate_table_size()
完成。
更改历史记录
- PostgreSQL 9.0
- 添加(提交 4f15699d)
示例
pg_table_size()
的基本用法示例
postgres=# SELECT pg_size_pretty(pg_table_size('object_property')); pg_size_pretty ---------------- 475 MB (1 row)
检索索引的大小
postgres=# SELECT pg_size_pretty(pg_table_size('object_property_pkey')); pg_size_pretty ---------------- 5008 kB (1 row)
尝试检索不存在的关系的大小
postgres=# SELECT pg_table_size('foo'); ERROR: relation "foo" does not exist LINE 1: SELECT pg_table_size('foo');
参考文献
- PostgreSQL 文档: 数据库对象大小函数