Postgres数据库大小命令


323

是否有任何命令可以查找Postgres中所有数据库的大小?

我可以使用以下命令找到特定数据库的大小:

select pg_database_size('databaseName');

1
它的单位是什么?以字节为单位吗?
Abel Callejo

它是字节。:-)
john16384

Answers:


365

并且...如果万一您不想输入整个查询,也可以输入...

\l+ <database_name>

您将获得有关数据库的一些详细信息,包括数据库的大小。

还有...获取所有数据库的大小。

您可以输入...

\l+

您可能需要进入postgresql命令提示符以使用这些postgresql helper命令进行查询。

通过键入检查其他postgresql helper命令

\?

在postgresql命令提示符下。


193

您可以从“ pg_datbase”系统表中获取可以连接到的所有数据库的名称。只需将函数应用于名称,如下所示。

select t1.datname AS db_name,  
       pg_size_pretty(pg_database_size(t1.datname)) as db_size
from pg_database t1
order by pg_database_size(t1.datname) desc;

如果您希望输出由机器而不是人类使用,则可以剪切pg_size_pretty()函数。


有时数据库也包含索引。它具有一定的存储价值。我正在寻找一个将提供完整数据库大小的命令。
美丽的心灵2013年

11
@ user2151087:pg_database_size() 包括索引的大小
a_horse_with_no_name 2013年

万一有人怀疑,此查询提供的值与完全相同\l+。不过,输出格式更易于阅读(列较少)。可写性与可读性之间的权衡…
Skippy le Grand Gourou

158
-- Database Size
SELECT pg_size_pretty(pg_database_size('Database Name'));
-- Table Size
SELECT pg_size_pretty(pg_relation_size('table_name'));

5
这个答案与迈克的答案有何不同?
a_horse_with_no_name

3
为了将来我和其他人落在这里,我为您省去了麻烦:这是较短的,用于命名数据​​库/表,其中Mike是服务器上所有数据库的数据库,后者可以更好地回答原始问题。
詹姆斯·布朗

78

基于答案在这里通过@Hendy Irawan

显示数据库大小:

\l+

例如

=> \l+
 berbatik_prd_commerce    | berbatik_prd     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 19 MB   | pg_default | 
 berbatik_stg_commerce    | berbatik_stg     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 8633 kB | pg_default | 
 bursasajadah_prd         | bursasajadah_prd | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1122 MB | pg_default | 

显示表格大小:

\d+

例如

=> \d+
 public | tuneeca_prd | table | tomcat | 8192 bytes | 
 public | tuneeca_stg | table | tomcat | 1464 kB    | 

仅适用于psql


1
对我来说,只有\d+ *工作,平淡地\d+回来了Did not find any relations.
菲尔·皮罗

1
@philpirozhkov首先连接到数据库(\c dbname),然后执行\d+
chappjc

是数字1还是小写L?
dman

28

是的,在Postgres中有一个命令可以查找数据库的大小。如下:

SELECT pg_database.datname as "database_name", pg_size_pretty(pg_database_size(pg_database.datname)) AS size_in_mb FROM pg_database ORDER by size_in_mb DESC;

3
该功能的顺序错误。它无法分辨人类可读格式之间的区别。例如,大小为7151 KB的数据库位于大小为7 GB的数据库之前。
onnimonni

固定:SELECT database_name, pg_size_pretty(size) from (SELECT pg_database.datname as "database_name", pg_database_size(pg_database.datname) AS size FROM pg_database ORDER by size DESC) as ordered;
Michael

1
我认为您只需要“原始”大小即可进行排序。我用它代替了子查询 SELECT pg_database.datname AS "DB Name", pg_size_pretty(pg_database_size(pg_database.datname)) AS "Size" FROM pg_database ORDER BY (pg_database_size(pg_database.datname)) DESC;
M-Dahab

20
SELECT pg_size_pretty(pg_database_size('name of database'));

这将为您提供特定数据库的总大小,但是我认为您无法在服务器内完成所有数据库。

但是你可以这样做...

DO
$$
DECLARE
r   RECORD;
db_size TEXT;
BEGIN
FOR r in
SELECT datname FROM pg_database
WHERE datistemplate = false
LOOP
db_size:= (SELECT pg_size_pretty(pg_database_size(r.datname)));

RAISE NOTICE 'Database:% , Size:%', r.datname , db_size;

END LOOP;
END;
$$

为什么它不能是单个查询,pg_database而不是这个丑陋的pl / pgsql?
MozenRath

12

来自PostgreSQL Wiki


注意:用户无法连接到的数据库将按照无限大小进行排序。

SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
        ELSE 'No Access'
    END AS Size
FROM pg_catalog.pg_database d
    ORDER BY
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(d.datname)
        ELSE NULL
    END DESC -- nulls first
    LIMIT 20

该页面还包含用于查找最大关系和最大表的大小的代码段。


4

您可以使用下面的查询来查找PostgreSQL所有数据库的大小。

参考来自此博客。

SELECT 
    datname AS DatabaseName
    ,pg_catalog.pg_get_userbyid(datdba) AS OwnerName
    ,CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(datname))
        ELSE 'No Access For You'
    END AS DatabaseSize
FROM pg_catalog.pg_database
ORDER BY 
    CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(datname)
        ELSE NULL
    END DESC;

3

启动pgAdmin,连接到服务器,单击数据库名称,然后选择“统计信息”选项卡。您将在列表底部看到数据库的大小。

然后,如果您单击另一个数据库,则该数据库将保留在“统计信息”选项卡上,因此您可以轻松查看许多数据库大小,而无需花费很多精力。如果打开表列表,它将显示所有表及其大小。


1
如果单击Databases树节点(附加到数据库连接)并选择Statistics选项卡,将为您提供所有数据库及其大小的摘要(第三列)。
zloster '16

2
du -k /var/lib/postgresql/ |sort -n |tail

2
您可能想添加更多有关以下假设的上下文,这些假设使数据库重新存储数据,其输出将是什么样,等等
。– fzzfzzfzz

3
尽管这可能是一个准确的答案,但最好的做法是包括一些解释。
狙击

在CentOS上正确的命令是这样的: du -k /var/lib/pgsql/ | sort -n | tail
Feriman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.