PostgreSQL 查看数据库中对象的大小

本文介绍了在 PostgreSQL 如何查看数据库、表、索引和表空间的大小。

作为数据库管理者,您经常需要查看数据库的占用空间,这包括 数据库、表、索引和表空间的大小,以便为他们分配合理的存储空间。

PostgreSQL 数据库大小

您可以使用 pg_database_size() 函数获取整个数据库的大小。例如,以下语句返回 testdb 数据库的大小:

SELECT pg_database_size('testdb');
 pg_database_size
------------------
          9044483

pg_database_size() 函数以字节为单位返回数据库的大小,这不容易阅读。您可以使用 pg_size_pretty() 函数将字节转为更易于阅读值。如下:

SELECT
  pg_size_pretty(
    pg_database_size('testdb')
  );

该语句返回以下结果:

 pg_size_pretty
----------------
 8833 kB

如果您想要要获取当前数据库服务器中所有数据库的大小,请使用以下语句:

SELECT
  datname,
  pg_size_pretty(pg_database_size(datname)) AS size
  FROM pg_database;
   datname   |  size
-------------+---------
 postgres    | 8561 kB
 template1   | 8401 kB
 template0   | 8401 kB
 testdb      | 8833 kB
 sakila      | 16 MB
 testdb2     | 8521 kB
 test_new_db | 8401 kB

PostgreSQL 表大小

您可以使用 pg_relation_size() 函数获取一个表的大小。例如,以下语句返回 Sakila 示例数据库中的 actor 表的大小:

SELECT
  pg_size_pretty(
    pg_relation_size('actor')
  );
 pg_size_pretty
----------------
 16 kB

pg_relation_size() 函数返回表的数据的大小,不包含表中的索引的大小。如果要获取表的总的大小,请使用 pg_total_relation_size() 函数, 如下:

SELECT
  pg_size_pretty(
    pg_total_relation_size('actor')
  );
 pg_size_pretty
----------------
 72 kB

要获取数据库中所有的表的大小,您可以使用如下语句:

SELECT
  tablename,
  pg_size_pretty(pg_total_relation_size('actor')) size
FROM pg_tables
WHERE schemaname = 'public';
      tablename       | size
----------------------+-------
 actor                | 72 kB
 film                 | 72 kB
 payment_p2007_02     | 72 kB
 payment_p2007_03     | 72 kB
 payment_p2007_04     | 72 kB
 payment_p2007_05     | 72 kB
 payment_p2007_06     | 72 kB
 payment_p2007_01     | 72 kB
 address              | 72 kB
 category             | 72 kB
 city                 | 72 kB
 country              | 72 kB
 customer             | 72 kB
 film_actor           | 72 kB
 film_category        | 72 kB
 inventory            | 72 kB
 language             | 72 kB
 rental               | 72 kB
 staff                | 72 kB
 store                | 72 kB
 payment              | 72 kB
 film_copy            | 72 kB
 city_copy            | 72 kB
 film_r               | 72 kB
 film_ranting_g_title | 72 kB

PostgreSQL 索引大小

PostgreSQL pg_indexes_size() 函数用于获取一个指定表上的索引的大小。例如,要获取 actor 表的所有索引的总大小,请使用以下语句:

SELECT
  pg_size_pretty(
    pg_indexes_size('actor')
  );
 pg_size_pretty
----------------
 32 kB

PostgreSQL 表空间大小

PostgreSQL pg_tablespace_size() 函数用于获取一个指定的表空间的大小。

以下语句返回 pg_default 表空间的大小:

SELECT
  pg_size_pretty (
      pg_tablespace_size('pg_default')
  );
 pg_size_pretty
----------------
 67 MB

PostgreSQL 值大小

PostgreSQL pg_column_size() 函数用于获取指定的值占用的空间,例如:

以下语句返回一个 smallint 类型的值的大小:

select pg_column_size(1::smallint);
 pg_column_size
----------------
              2

以下语句返回一个 int 类型的值的大小:

select pg_column_size(1::int);
 pg_column_size
----------------
              4

以下语句返回一个 bigint 类型的值的大小:

select pg_column_size(1::bigint);
 pg_column_size
----------------
              8

结论

本文讲述了几个的函数来获取数据库、表、索引、表空间和值的大小。