PostgreSQL查找数据库使用的总磁盘空间

77

我在我的PostgreSQL服务器上托管了50多个数据库。我需要将其中一些数据库移动到另一台主机上,以释放一些磁盘空间,但是如何测量每个数据库在我的卷上使用的磁盘空间?

是否存在任何函数可获取我想要的信息?

6个回答

117

7
澄清一下,这实际上显示的是数据库的大小,而不是数据库中剩余的空间,这是最初的问题。 - BeerIsGood

53

8
这是一个老问题,但我创建了一种通过 SQL 查询查看 Linux 命令 df -h(文件系统、大小、已用、可用、使用率、挂载点)结果的方法,从而获取给定文件系统的可用磁盘空间和总可用磁盘空间。虽然不完全符合问题要求,但对某些人/我很有帮助。我希望这个答案几个小时前就在这里了,所以我把它放在这里(仅适用于 Linux):
创建一个像这样的 cron 作业:
@hourly df -h | awk '{print $1","$2","$3","$4","$5","$6}' > /pathhere/diskspaceinfo.csv`

创建一个外部表以进行查询:
create extension file_fdw;

create server logserver FOREIGN DATA WRAPPER file_fdw;

CREATE FOREIGN TABLE diskspaceinfo 
(file_sys text, size text, used text, avail text, used_pct text, mount text) 
SERVER fileserver 
OPTIONS (filename '/pathhere/diskspaceinfo.csv', format 'csv');

然后像这样查询您的表:
select * from diskspaceinfo

如果您只想要特定的内容,当然可以筛选表格以获取所需内容。它有一些限制,但对我非常有用。
如果您有 plperlu,则可以使用此函数: https://wiki.postgresql.org/wiki/Free_disk_space 一个有用的链接: https://wiki.postgresql.org/wiki/Disk_Usage

4
一名登山者为登山再次点赞! - pylover

7
执行以下查询以显示服务器中每个数据库的大小。
SELECT datname as db_name, pg_size_pretty(pg_database_size(datname)) as db_usage FROM pg_database;

注意:这是基于已接受的答案,但可以节省不必运行每个数据库查询的时间。


2

我很喜欢mountainclimber的答案。我根据以下方式修改了cron,使其返回字节并删除标题行。

* * * * * df -B1 | tail -n+2 | awk '{print $1","$2","$3","$4","$5","$6}' > /var/www/diskspaceinfo.csv

0
使用RDS Postgresql数据库,您可以使用FreeLocalStorage Cloudwatch指标减去@Robert Harvey提供的查询结果来获取已使用的存储空间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接