表 9-64 中显示的函数计算数据库对象使用的实际磁盘空间

表9-64. 数据库对象尺寸函数

名字

返回类型

描述

pg_column_size(any)

int

存储一个指定的数值需要的字节数(可能压缩过)

pg_database_size(oid)

bigint

指定 OID 代表的数据库使用的磁盘空间

pg_database_size(name)

bigint

指定名称的数据库使用的磁盘空间

pg_indexes_size(regclass)

bigint

隶属于指定表的索引们使用的总共磁盘空间

pg_relation_size(relationregclass, fork text)

bigint

指定的表或者索引的执行fork ('main', 'fsm' 或者 'vm') 所使用的磁盘空间

pg_relation_size(relationregclass)

bigint

pg_relation_size(..., 'main')的简写

pg_size_pretty(bigint)

text

把表示为64-bit 整数的字节计算的尺寸转换成一个人类易读的尺寸。

pg_size_pretty(numeric)

Text

把表示为numeric值的字节计算的尺寸转换成一个人类易读的尺寸。

pg_table_size(regclass)

Bigint

指定表使用的磁盘空间,不包括索引(但是包括TOAST,自由空间映射和可见映射)

pg_tablespace_size(oid)

bigint

指定 OID 代表的表空间使用的磁盘空间

pg_tablespace_size(name)

bigint

指定名字的表空间使用的磁盘空间

pg_total_relation_size(regclass)

bigint

指定的表所使用的全部磁盘空间,包括索引和Toast。

注:以上数据库对象名可以用模式名修饰。

pg_column_size 显示用于存储某个独立数据值的空间。

pg_total_relation_size接受表或者toast表的OID或者名字,然后返回该对象使用的全部磁盘空间。该函数等价于pg_table_size + pg_indexes_size。

pg_table_size接受一个表的OID或者名称,并且返回该表所需的磁盘空间,隶属于该表的索引所使需空间除外。(TOAST空间,空闲空间映射,可见映射是包括在内的。)

pg_indexes_size接受一个表的OID或者名称,并且返回该表的所有索引所使用的全部磁盘空间。

pg_database_size 和 pg_tablespace_size 接受一个数据库或者表空间的 OID 或者名字,然后返回该对象使用的全部磁盘空间。为了使用pg_database_size,你必须对指定的这个数据库有connect权限(该权限是默认授予的)。为了使用pg_tablespace_size,你必须对指定的这个表空间有create权限,除非该表空间是当前数据库的默认表空间。

pg_relation_size 接受一个表、索引、压缩(toast)表的 OID 或者名字,然后返回它们以字节计的磁盘空间大小。指定‘main’或者省略第二个参数会返回该关系的main data fork的尺寸。指定 'fsm'会返回该关系的空间空间映射的尺寸。指定‘vm’会返回该关系的可见映射的尺寸(参阅 Section 58.4获取更多详细信息)。请注意改函数一次只能返回一个fork的尺寸;在大多数情况下,使用更高级别的函数pg_total_relation_size 和pg_table_size会更加方便。

pg_size_pretty 用于把其它函数的结果格式化成一种人类易读的格式,可以根据情况使用KB 、MB 、GB 、TB 。

以上在表或者索引上执行的函数接受一个regclass 参数,该参数就是系统目录中pg_class中表和索引的OID。你不用禽兽产看OID,因为regclass数据类型的输入转换器将会帮你来转换。只要写上单引号引起的表名,那样看起来想一个文字常量。为了处理普通SQL名称的兼容,字符串会被转换成小谢,除非表名包含双引号。

如果向以上函数传的OID参数表示的是一个不存在对象,那么函数会返回NULL.

几个示例:

--查看所有数据库占用磁盘空间的大小:
highgo=#  select pg_database.datname, pg_size_pretty(pg_database_size(pg_databas
e.datname)) AS size from pg_database;
  datname  |  size
-----------+---------
 template1 | 5385 kB
 template0 | 5377 kB
 highgo    | 11 GB
 translate | 5763 kB
 zyy       | 5603 kB
 test      | 122 MB
 testlyy   | 5459 kB
 dbo       | 361 MB
 jnggzy    | 58 MB
 hh        | 5475 kB
 xxx       | 5467 kB
 sqlserver | 5467 kB
 xz        | 249 MB
 ccc       | 321 MB
(14 行记录)

--查看某个表的大小:
highgo=# select pg_size_pretty(pg_table_size('public.test'));--不包括索引,但包括toast
或者
highgo=# select pg_size_pretty(pg_total_relation_size('public.test'));--包括索引和toast
 pg_size_pretty
----------------
 24 kB
(1 行记录)
--查看所有数据库占用磁盘空间的大小:
highgo=#  select pg_database.datname, pg_size_pretty(pg_database_size(pg_databas
e.datname)) AS size from pg_database;
  datname  |  size
-----------+---------
 template1 | 5385 kB
 template0 | 5377 kB
 highgo    | 11 GB
 translate | 5763 kB
 zyy       | 5603 kB
 test      | 122 MB
 testlyy   | 5459 kB
 dbo       | 361 MB
 jnggzy    | 58 MB
 hh        | 5475 kB
 xxx       | 5467 kB
 sqlserver | 5467 kB
 xz        | 249 MB
 ccc       | 321 MB
(14 行记录)

--查看某个表的大小:
highgo=# select pg_size_pretty(pg_table_size('public.test'));--不包括索引,但包括toast
或者
highgo=# select pg_size_pretty(pg_total_relation_size('public.test'));--包括索引和toast
 pg_size_pretty
----------------
 24 kB
(1 行记录)









表 9-65中显示的函数用来识别指定数据库对象的磁盘文件

名称

返回类型

描述

pg_relation_filenode(relation regclass)

oid

指定关系的文件节点(filenode)编号

pg_relation_filepath(relation regclass)

text

指定关系的文件路径名

pg_relation_filenode 接受表、索引、序列或者toast表的OID或者名称,并且返回当前分配给它的“文件节点”编号。文件节点是关系(参阅Section 58.1 获取更多详细信息)的文件名的基本组成部分。对于大部分表来说,改函数返回的结果与pg_class.relfilenode相同,但是对于某些系统目录,relfilenode 是0,必须使用该函数来获取准确值。如果向该函数中传入一个不拥有存储的关系(比如:视图),那么会返回NULL。

pg_relation_filepath与pg_relation_filenode类似,但是前者返回该关系的整个路径名称(相对于数据库簇的数据目录PGDATA而言)。


几个示例:


highgo=# select pg_relation_filenode('public.test');
 pg_relation_filenode
----------------------
                16612
(1 行记录)

highgo=# select pg_relation_filepath('public.test');
 pg_relation_filepath
----------------------
 base/11839/16612
(1 行记录)
highgo=# select pg_relation_filenode('public.test');
 pg_relation_filenode
----------------------
                16612
(1 行记录)

highgo=# select pg_relation_filepath('public.test');
 pg_relation_filepath
----------------------
 base/11839/16612
(1 行记录)

PostgreSQL社区官方文档:

系统管理函数:http://www.postgresql.org/docs/9.3/static/functions-admin.html

系统信息函数:http://www.postgresql.org/docs/9.3/static/functions-info.html