九月 15, 2023
摘要:在本教程中,您将学习如何使用一些方便的函数获取数据库、表、索引、表空间的大小。
目录
PostgreSQL 表大小
要获取特定表的大小,可以使用pg_relation_size()
函数。例如,您可以获取dvdrental
示例数据库中actor
表的大小,如下所示:
select pg_relation_size('actor');
pg_relation_size()
函数返回特定表以字节为单位的大小:
pg_relation_size
------------------
16384
为了使结果更具可读性,您可以使用pg_size_pretty()
函数。pg_size_pretty()
函数获取另一个函数的结果,并根据需要使用字节、kB、MB、GB 或 TB 对其进行格式化。例如:
SELECT
pg_size_pretty (pg_relation_size('actor'));
以下是以 kB 为单位的输出:
pg_size_pretty
----------------
16 kB
(1 row)
pg_relation_size()
函数仅返回表自身的大小,不包括索引或附加对象。
要获取表的总大小,可以使用pg_total_relation_size()
函数。例如,要获取 actor 表的总大小,可以使用以下语句:
SELECT
pg_size_pretty (
pg_total_relation_size ('actor')
);
下面显示了输出:
pg_size_pretty
----------------
72 kB
(1 row)
您可以使用pg_total_relation_size()
函数查找包括索引在内的最大表的大小。
例如,以下查询返回dvdrental
数据库中前 5 个最大的表:
SELECT
relname AS "relation",
pg_size_pretty (
pg_total_relation_size (C .oid)
) AS "total_size"
FROM
pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C .relnamespace)
WHERE
nspname NOT IN (
'pg_catalog',
'information_schema'
)
AND C .relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY
pg_total_relation_size (C .oid) DESC
LIMIT 5;
这是输出:
relation | total_size
------------+------------
rental | 2472 kB
payment | 2232 kB
film | 688 kB
film_actor | 536 kB
inventory | 464 kB
(5 rows)
PostgreSQL 数据库大小
要获取整个数据库的大小,可以使用pg_database_size()
函数。例如,以下语句返回dvdrental
数据库的大小:
SELECT
pg_size_pretty (
pg_database_size ('dvdrental')
);
该语句返回以下结果:
pg_size_pretty
----------------
15 MB
(1 row)
要获取当前数据库服务器中每个数据库的大小,可以使用以下语句:
SELECT
pg_database.datname,
pg_size_pretty(pg_database_size(pg_database.datname)) AS size
FROM pg_database;
datname | size
----------------+---------
postgres | 7055 kB
template1 | 7055 kB
template0 | 6945 kB
dvdrental | 15 MB
PostgreSQL 索引大小
要获取附加到表的所有索引的总大小,可以使用pg_indexes_size()
函数。
pg_indexes_size()
函数接受 OID 或表名作为参数,并返回该表附加的所有索引使用的总磁盘空间。
例如,要获取附加到film
表的所有索引的总大小,请使用以下语句:
SELECT
pg_size_pretty (pg_indexes_size('actor'));
这是输出:
pg_size_pretty
----------------
32 kB
(1 row)
PostgreSQL 表空间大小
要获取表空间的大小,可以使用pg_tablespace_size()
函数。pg_tablespace_size()
函数接受表空间名称,并返回以字节为单位的大小。
以下语句返回pg_default
表空间的大小:
SELECT
pg_size_pretty (
pg_tablespace_size ('pg_default')
);
该语句返回以下输出:
pg_size_pretty
----------------
43 MB
(1 row)
PostgreSQL 值大小
要查找需要多少空间来存储特定值,可以使用pg_column_size()
函数,例如:
select pg_column_size(5::smallint);
pg_column_size
----------------
2
(1 row)
select pg_column_size(5::int);
pg_column_size
----------------
4
(1 row)
select pg_column_size(5::bigint);
pg_column_size
----------------
8
(1 row)
在本教程中,您学习了各种方便的函数来获取数据库、表、索引、表空间和值的大小。