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文档: 数据库对象大小函数
