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

pyl*_*ver 36 database postgresql diskspace

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

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

Rob*_*vey 52

SELECT pg_database_size('geekdb')
Run Code Online (Sandbox Code Playgroud)

要么

SELECT pg_size_pretty(pg_database_size('geekdb'))
Run Code Online (Sandbox Code Playgroud)

http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-commands-with-examples/

  • 需要澄清的是,这实际上显示了数据库的大小,而不是数据库中剩余多少空间,这是最初的问题。 (2认同)

sha*_*rez 23

你可以使用postgresql元命令:

  • \l 会列出数据库
  • \l+ 使用大小,表空间,描述扩展列表.

使用\?获得的元命令的完整列表.另见:https: //www.postgresql.org/docs/9.5/static/app-psql.html


Ral*_*och 10

执行以下查询以显示服务器中每个数据库的大小。

SELECT datname as db_name, pg_size_pretty(pg_database_size(datname)) as db_usage FROM pg_database;
Run Code Online (Sandbox Code Playgroud)

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


mou*_*ber 8

这是一个老问题,但我创建了一种通过 sql 查询查看 linux 命令结果df -h(文件系统、大小、已使用、可用、使用%、安装位置)的方法,从而查看您的可用磁盘空间和总可用磁盘空间给定的文件系统。不完全是问题所在,但对某些用户/我有帮助。我希望答案在几个小时前就已经存在了,所以我把它放在这里(仅限 Linux):

创建一个像这样的 cron 作业:

@hourly df -h | awk '{print $1","$2","$3","$4","$5","$6}' > /pathhere/diskspaceinfo.csv`
Run Code Online (Sandbox Code Playgroud)

创建外部表进行查询:

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');
Run Code Online (Sandbox Code Playgroud)

然后像这样查询你的表:

select * from diskspaceinfo
Run Code Online (Sandbox Code Playgroud)

如果您只想要特定的内容,当然只需过滤表格以获取您想要的内容即可。它有局限性,但对我来说非常有用。

如果你有plperlu,你可以使用这个函数: https: //wiki.postgresql.org/wiki/Free_disk_space

有用的链接: https: //wiki.postgresql.org/wiki/Disk_Usage

  • 登山者的另一个登山+1! (4认同)