我在我的PostgreSQL服务器上托管了50多个数据库。我需要将其中一些数据库移动到另一台主机上,以释放一些磁盘空间,但是如何测量每个数据库在我的卷上使用的磁盘空间?
是否存在任何函数可获取我想要的信息?
我在我的PostgreSQL服务器上托管了50多个数据库。我需要将其中一些数据库移动到另一台主机上,以释放一些磁盘空间,但是如何测量每个数据库在我的卷上使用的磁盘空间?
是否存在任何函数可获取我想要的信息?
SELECT pg_database_size('geekdb')
或者SELECT pg_size_pretty(pg_database_size('geekdb'))
http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-commands-with-examples/
您可以使用 PostgreSQL 元命令:
\l
用于列出数据库\l+
扩展了列表,包括大小、表空间和描述。使用 \?
获取所有元命令的完整列表。请参阅:
https://www.postgresql.org/docs/9.5/static/app-psql.html
df -h
(文件系统、大小、已用、可用、使用率、挂载点)结果的方法,从而获取给定文件系统的可用磁盘空间和总可用磁盘空间。虽然不完全符合问题要求,但对某些人/我很有帮助。我希望这个答案几个小时前就在这里了,所以我把它放在这里(仅适用于 Linux):@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
SELECT datname as db_name, pg_size_pretty(pg_database_size(datname)) as db_usage FROM pg_database;
注意:这是基于已接受的答案,但可以节省不必运行每个数据库查询的时间。
我很喜欢mountainclimber的答案。我根据以下方式修改了cron,使其返回字节并删除标题行。
* * * * * df -B1 | tail -n+2 | awk '{print $1","$2","$3","$4","$5","$6}' > /var/www/diskspaceinfo.csv